Java集合

1、Java 集合可分为 Collection 和 Map 两种体系

  Collection接口:单列数据,定义了存取一组对象的方法的集合
    List:元素有序、可重复的集合
    Set:元素无序、不可重复的集合
  Map接口:双列数据,保存具有映射关系“key-value对”的集合

Collection 接口方法

1、添加  
    add(Object obj)  
    addAll(Collection coll) 
2、获取有效元素的个数 
    int size()
3、清空集合  
    void clear() 
4、是否是空集合  
    boolean isEmpty() 
5、是否包含某个元素  
    boolean contains(Object obj):是通过元素的equals方法来判断是否 是同一个对象 ;
    boolean containsAll(Collection c):也是调用元素的equals方法来比 较的。拿两个集合的元素挨个比较。
6、删除  
    boolean remove(Object obj) :通过元素的equals方法判断是否是 要删除的那个元素。只会删除找到的第一个元素  
    boolean removeAll(Collection coll):取当前集合的差集 
7、取两个集合的交集  
    boolean retainAll(Collection c):把交集的结果存在当前集合中,不 影响c 
8、集合是否相等  
    boolean equals(Object obj) 
9、转成对象数组  
    Object[] toArray() 
10、获取集合对象的哈希值  
    hashCode() 
11、遍历  
    iterator():返回迭代器对象,用于集合遍历

拓展:数组 --->集合:调用Arrays类的静态方法asList(T ... t)   List<String> list = Arrays.asList(new String[]{"AA", "BB", "CC"});


使用Collection集合存储对象,要求对象所属的类满足:

向Collection接口的实现类的对象中添加数据obj时,要求obj所在类要重写equals().

Object中的equals()方法默认是按地址比较,而不按内容进行比较,

public boolean equals(Object obj) {
       return (this == obj);
}

在String中覆写了Object中的equals方法,以用于判断字符串是否相同,

public boolean equals(Object anObject) {
     if (this == anObject) {
         return true;
     }
     if (anObject instanceof String) {
         String anotherString = (String) anObject;
         int n = value.length;
         if (n == anotherString.value.length) {
             char v1[] = value;
             char v2[] = anotherString.value;
             int i = 0;
             while (n-- != 0) {
                 if (v1[i] != v2[i])
                         return false;
                 i++;
             }
             return true;
         }
     }
     return false;
 }

Object中equals方法可以被子类重写,然后多态调用,当我们要自定义对象比较时一般要覆写equals方法,比如有Person对象,同姓名同年龄,视为同一个对象,

public boolean equals(Object obj)
{
    if(!(obj instanceof Person))
        return false;
    Person p = (Person)obj;
    return this.name.equals(p.name) && this.age == p.age;
}    

使用 Iterator 接口遍历集合元素

  Collection接口继承了java.lang.Iterable接口,该接口有一个iterator()方法,那么所 有实现了Collection接口的集合类都有一个iterator()方法,用以返回一个实现了 Iterator接口的对象。

  Iterator 仅用于遍历集合,Iterator 本身并不提供承装对象的能力。如果需要创建 Iterator 对象,则必须有一个被迭代的集合。

  集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认游标都在集合 的第一个元素之前。

Iterator iterator = coll.iterator();
//
hasNext():判断是否还有下一个元素 while(iterator.hasNext()){ //next():①指针下移②将下移以后集合位置上的元素返回
System.out.println(iterator.next());
}

foreach 循环迭代访问 Collection和数组

  遍历操作不需获取Collection或数组的长度,无需使用索引访问元素。

  遍历集合的底层调用Iterator完成操作,foreach还可以用来遍历数组。

 

posted @ 2020-05-04 14:05  kkzhang  阅读(160)  评论(0编辑  收藏  举报