zoukankan      html  css  js  c++  java
  • 集合总结

    集合总结

    一、总结

    1. 所有Java集合类都位于java.util包中,与Java数组不同,Java集合中不能存放基本数据类型,只能存放对象的引用。

    2. Set、List、Map统称为Java集合。

    3. 在将对象存储到集合类中时,为加快存储速度,要求被在座对象的类中必须覆盖equals()方法和hashCode()方法。即如果一个类重新实现了equals()方法,那么也应该重新实现hashCode()方法,并且保证当两个对象相等时,它们的哈希码也相同。

    4. <? extends Object> 对集合类的范型设定了上限,表示接受Object类型及其子类型。

    <? super String> 对集合类的范型设定了下限,表示接受String类型及其父类型。

    5. 遍历集合可使用“for(Type t : c){…}”语法,其中c表示需要遍历的集合,Type表示集合内元素的类型,t引用每次从集合中取出的当前元素。

    6. 对于Java集合,还有一个实用类,即java.util.Collections,它的一部分方法专门用于操纵List类型集合,还有一部分方法可用于操纵所有的Collection类型或Map类型集合。

    二、Collection和Iterator接口

    1. Collection接口的方法

    方法

    描述

    boolean add(Object o)

    向集合中加入一个对象的引用

    void clear()

    删除集合中的所有对象,即不再持有这些对象的引用

    boolean contains(Object o)

    判断在集合中是否持有特定对象的引用

    Iterator iterator()

    返回一个Iterator对象,可用它来遍历集合中的元素

    boolean remove(Object o)

    从集合中删除一个对象的引用

    int size()

    返回集合中元素的数目

    Object[] toArray()

    返回一个数组,该数组包含集合中的所有元素

    boolean isEmpty()

    判断集合是否为空

     

    注:Set接口和List接口继承了Collection接口,而Map接口没有继承Collection接口,所以Set对象和List对象可以调用以上方法,但Map对象不能调用以上方法。

    2. Iterator接口中声明了以下方法:

    a) hasNext():判断集合中的元素是否遍历完毕,如果没有,就返回true。

    b) next():返回下一个元素。

    c) remove():从集合中删除上一个由next()方法返回的元素。

    3. 如果集合中的元素没有排序,Iterator遍历集合中元素的顺序是任意的,并不一定与向集合中加入元素的顺序保持一致。

    4. 当通过Collection集合的iterator()方法得到一个Iterator对象后,如果当前线程或其他线程接着又通过Collection集合的一些方法对集合进行了修改操作(调用当前Iterator对象的remove()方法来修改集合除外),接下来访问这个Iterator对象的next()方法会导致java.util.ConcurrentModificationException运行时异常。

    三、Set(集)

    1. Set接口主要有两个实现类:HashSet和TreeSet。HashSet类有一个子类LinkedHashSet类,它不仅实现了哈希算法,而且实现了链表数据结构。TreeSet类实现了SortedSet接口,具有排序功能。此外还有一个以数组为基础实现的Set类CopyOnWriteArraySet。

    2. Set系列类的方法不支持插入和修改。同时Set集合中不能有重复的对象。

    3. Set采用对象的equals()方法比较两个对象是否相等,即判断这个某个对象是否已经存在于集合中。

    4. 当向集合中加入一个对象时,HashSet会调用对象的hashCode()方法来获得哈希码,然后根据这个哈希码进一步计算出对象在集合中的存放位置。

    5. TreeSet支持两种排序方式:自然排序和客户化排序。在默认情况下,TreeSet采用自然排序方式。

    6. TreeSet调用对象的compareTo()方法比较集合中对象的大小 ,然后进行升序排列,这种排序方式称为自然排序。使用自然排序时,只能向TreeSet集合中加入同类型的对象,并且这些对象的类必须实现了Comparable接口。

    7. 最适合TreeSet排序的是不可变类。

    8. TreeSet类支持客户化排序,可以先创建一个实现java.util.Comparator<Type>接口的类,<Type>指定被比较的对象的类型,Comparator有个compare(Type x,Type y)方法,用于比较两个对象的大小。当compare(x,y)的返回值大于0时,表示x>y,返回值小于0时,表示x<y,返回值等于0时,表示x等于y。示例代码如下:

     1 import java.util.Comparator;
     2 
     3 import java.util.Iterator;
     4 
     5 import java.util.Set;
     6 
     7 import java.util.TreeSet;
     8 
     9 public class CustomerComparator implements Comparator{
    10 
    11 public int compare(Customer x,Customer y){
    12 
    13 if(x.getName().compareTo(y.getName()) > 0)
    14 
    15 return -1;
    16 
    17 if(x.getName().compareTo(y.getName()) <0 )
    18 
    19 return 1;
    20 
    21 return 0;
    22 
    23 }
    24 
    25 public static void main(String[] args) {
    26 
    27 Set<Customer> set = new TreeSet<Customer>(new CustomerComparator());
    28 
    29 Customer customer1 = new Customer("Tom",15);
    30 
    31 Customer customer2 = new Customer("Jack",16);
    32 
    33 Customer customer3 = new Customer("Mary",26);
    34 
    35 set.add(customer1);
    36 
    37 set.add(customer2);
    38 
    39 set.add(customer3);
    40 
    41 Iterator<Customer> it = set.iterator();
    42 
    43 while(it.hasNext()){
    44 
    45 Customer customer = it.next();
    46 
    47 System.out.println(customer.getName()+" "+customer.getAge());
    48 
    49 }
    50 
    51 }
    52 
    53 }
    四、List(列表)

    1. List中的元素以线性方式存储,集合中允许存放重复对象。List接口的主要的实现类有ArrayList(长度可变的数组)和LinkedList(链表)。并且LinkedList单独具有addFirst()、addLast()、getFirst()、getLast()、removeFirst()、removeLast()方法,这些方法使得LinkedList可以作为堆栈、队列和双向队列来使用。

    2. List只能对集合中的对象按索引位置排序,如果想要对List中的对象按其他特定方式排序,可以借助Comparator接口和Collections类中的sort方法。

    3. List的listIterator()方法返回一个ListIterator对象,ListIterator接口继承了Iterator接口,此外还提供了专门操纵列表的方法:

    add()

    向列表中插入一个元素

    hasNext()

    判断列表中是否还有下一个元素

    hasPrevious()

    判断列表中是否还有上一个元素

    next()

    返回列表中的下一个元素

    previous()

    返回列表中的上一个元素

    4. java.util.Arrays类的asList()方法能够把一个java数组包装为一个List对象,这个List对象代表固定长度的数组,所有对List对象的操作都会被作用到底层的java数组,因此不能调用这种List对象的add()和remove()方法。

    五、Map(映射)

    1. Map的entrySet()方法返回一个Set集合,在这个集合中存放了Map.Entry类型的元素,每个Map.Entry对象代表Map中的一对键与值。

    2. Map有两种比较常用的实现,HashMap和TreeMap,另外还有以链表和哈希表为基础实现的LinkedHashMap类。使用HashMap时,改写了equals()方法时,同时要改写hashCode()方法;TreeMap实现了SortedMap接口,能对键对象进行排序,支持自然排序和客户化排序。如果要对键进行客户化排序,可调用它的TreeMap(Comparator comparator)构造方法,参数comparator指定具体的排序方式。

    3. Map的keySet()方法返回集合中所有键对象的集合。

  • 相关阅读:
    个人永久性免费-Excel催化剂功能第103波-批量打开多文件或多链接
    个人永久性免费-Excel催化剂插件功能修复与更新汇总篇之八
    个人永久性免费-Excel催化剂功能第101波-批量替换功能(增加正则及高性能替换能力)
    个人永久性免费-Excel催化剂功能第99波-手机号码归属地批量查询
    个人永久性免费-Excel催化剂功能第100波-透视多行数据为多列数据结构
    个人永久性免费-Excel催化剂功能第98波-零代码零距离轻松接触并拥有金融大数据
    个人永久性免费-Excel催化剂功能第97波-快递单号批量查询物流信息
    个人永久性免费-Excel催化剂功能第95波-地图数据挖宝之IP地址转地理地址及不同经纬度版本转换
    个人永久性免费-Excel催化剂功能第96波-地图数据挖宝之全国天气查询(区域最细可到区县,最长预报4天)
    实现兼容document.querySelector的方法
  • 原文地址:https://www.cnblogs.com/zhaoyihaohaoxuexi/p/6822898.html
Copyright © 2011-2022 走看看