Java Collection

来源:互联网 发布:php程序员简历范文 编辑:程序博客网 时间:2024/05/29 11:16
数组: 存储同一种数据类型的集合容器.

数组的特点:
1. 只能存储同一种数据类型的数据。
2. 一旦初始化,长度固定。 
3. 数组中的元素与元素之间的内存地址是连续的。

注意: Object类型的数组可以存储任意类型的数据。


集合:集合是存储对象数据的集合容器。
 
集合比数组的优势:
1. 集合可以存储任意类型的对象数据,数组只能存储同一种数据类型 的数据。
2. 集合的长度是会发生变化的,数组的长度是固定的。

 
------------| Collection 单例集合的根接口
----------------| List  如果是实现了List接口的集合类,具备的特点: 有序,可重复。 
-------------------| ArrayList  ArrayList 底层是维护了一个Object数组实现的。 特点: 查询速度快,增删慢。
-------------------| LinkedList LinkedList 底层是使用了链表数据结构实现的, 特点: 查询速度慢,增删快。
-------------------| Vector(了解即可)  底层也是维护了一个Object的数组实现的,实现与ArrayList是一样的,但是Vector是线程安全的,操作效率低。


----------------| Set  如果是实现了Set接口的集合类,具备的特点: 无序,不可重复。
-------------------| HashSet  底层是使用了哈希表来支持的,特点: 存取速度快. 
-------------------| TreeSet   如果元素具备自然顺序 的特性,那么就按照元素自然顺序的特性进行排序存储。


Collection接口中的方法:

增加
add(E e)  添加成功返回true,添加 失败返回false.
addAll(Collection c)  把一个集合 的元素添加到另外一个集合中去。

删除
clear() 
remove(Object o) 

removeAll(Collection  c) 
retainAll(Collection  c) 

查看
size() 



判断
isEmpty() 
contains(Object o) 
containsAll(Collection<?> c) 

迭代
toArray() 

iterator() 



[java] view plain copy
 print?
  1.           
  2. import java.util.ArrayList;  
  3. import java.util.Collection;      
  4. public class Demo2 {  
  5.   
  6.   public static void main(String[] args) {  
  7. Collection c = new ArrayList();  
  8. c.add("令计划");  
  9. c.add("徐才厚");  
  10. c.add("周永康");  
  11. System.out.println("添加成功吗?"+c.add("郭美美"));  
  12.   
  13.   
  14. //创建集合  
  15. Collection c2 = new ArrayList();  
  16. c2.add("徐才厚");  
  17. c2.add("郭美美");  
  18. c2.add("狗娃");  
  19.   
  20. /* 
  21. c.addAll(c2); // 把c2的元素的添加到c集合 中去。 
  22. */  
  23.   
  24. /* 
  25.  删除方法: 
  26. c.clear(); //clear()清空集合中的元素 
  27. System.out.println("删除成功吗?"+c.remove("美美"));  // remove 指定集合中的元素删除,删除成功返回true,删除失败返回false. 
  28.  
  29. c.removeAll(c2); //删除c集合中与c2的交集元素。 
  30.  
  31. c.retainAll(c2); //保留c集合与c2的交集元素,其他的元素一并删除。 
  32. */  
  33. System.out.println("查看元素个数:"+c.size());  
  34.   
  35. System.out.println("集合的元素:"+ c);          
  36.   }  
  37.   
  38. }  

    运行结果:
    添加成功吗?true
    查看元素个数:4
    集合的元素:[令计划, 徐才厚, 周永康, 郭美美]




判断
isEmpty() 
contains(Object o) 
containsAll(Collection<?> c)

[java] view plain copy
 print?
  1.               
  2. import java.util.ArrayList;  
  3. import java.util.Collection;  
  4.   
  5. class Person{  
  6.       
  7.     int id;   
  8.       
  9.     String name;  
  10.   
  11.     public Person(int id, String name) {  
  12.         this.id = id;  
  13.         this.name = name;  
  14.     }  
  15.   
  16.     @Override  
  17.     public String toString() {  
  18.         return "{编号:"+this.id+" 姓名:"this.name+"}";  
  19.     }  
  20.       
  21.     @Override  
  22.     public boolean equals(Object obj) {  
  23.         Person p = (Person)obj;  
  24.         return this.id == p.id ;  
  25.     }  
  26.       
  27.       
  28.     //java规范: 一般重写equlas方法我们都会重写hashCode方法的。  
  29.     @Override  
  30.     public int hashCode() {  
  31.         return this.id;  
  32.     }  
  33.       
  34.       
  35.       
  36. }  
  37.   
  38.   
  39. class Dog{}  
  40.   
  41.   
  42. public class Demo3 {  
  43.       
  44.     public static void main(String[] args) {  
  45.         /*Collection c = new ArrayList(); 
  46.         c.add("令计划"); 
  47.         c.add("徐才厚"); 
  48.         c.add("周永康"); 
  49.         System.out.println("判断集合是否为空元素:"+ c.isEmpty()); 
  50.         System.out.println("判断集合中是否存在指定的元素:"+ c.contains("薄熙来"));*/  
  51.           
  52.         //集合添加自定义的元素  
  53.         Collection c = new ArrayList();  
  54.         c.add(new Person(110,"狗娃"));  
  55.         c.add(new Person(119,"狗剩"));  
  56.         c.add(new Person(120,"铁蛋"));  
  57.           
  58.           
  59.         Collection c2 = new ArrayList();  
  60.         c2.add(new Person(110,"狗娃"));  
  61.         c2.add(new Person(119,"狗剩"));  
  62.         c2.add(new Person(104,"陈狗剩"));  
  63.           
  64.           
  65.         System.out.println("c集合有包含c2集合中的所有元素吗?"+ c.containsAll(c2));  
  66.           
  67.           
  68.         //如果在现实生活中,只要身份证编号一致,那么就为同一个人。  
  69.         System.out.println("存在该元素吗?"+c.contains(new Person(120,"陈铁蛋"))); // 其实contains方法内部是依赖于equals方法进行比较的。  
  70.         System.out.println("集合的元素:"+ c);  
  71.           
  72.           
  73.     }  
  74. }     
运行结果:
c集合有包含c2集合中的所有元素吗?false
存在该元素吗?true
集合的元素:[{编号:110 姓名:狗娃}, {编号:119 姓名:狗剩}, {编号:120 姓名:铁蛋}]


迭代
toArray()

[java] view plain copy
 print?
  1. import java.util.ArrayList;  
  2. import java.util.Arrays;  
  3. import java.util.Collection;  
  4. public class Demo4 {  
  5.       
  6.     public static void main(String[] args) {  
  7.         /*Collection c = new ArrayList(); 
  8.         c.add("令计划"); 
  9.         c.add("徐才厚"); 
  10.         c.add("周永康"); 
  11.         Object[] arr = c.toArray(); //把集合中的元素全部 存储到一个Object的数组中返回。 
  12.         System.out.println("数组的元素:"+Arrays.toString(arr));*/  
  13.           
  14.           
  15.         Collection c = new ArrayList();  
  16.         c.add(new Person(110,"狗娃"));  
  17.         c.add(new Person(119,"狗剩"));  
  18.         c.add(new Person(120,"铁蛋"));  
  19.         Object[] arr = c.toArray();   
  20.         //需求: 把编号是110的人信息 输出。  
  21.         for(int i = 0 ; i<arr.length ; i++){  
  22.             Person p = (Person) arr[i];  //从Object数组中取出的元素只能使用Object类型声明变量接收,如果需要其他 的类型需要进行强制类型转换。  
  23.             if(p.id==110){  
  24.                 System.out.println(p);  
  25.             }  
  26.         }         
  27.     }  
  28.   
  29. }  

运行结果:
{编号:110 姓名:狗娃}


 


Collection---迭代的方法:
toArray() 
iterator()

迭代器的作用:就是用于抓取集合中的元素。

迭代器的方法:
hasNext()   问是否有元素可遍历。如果有元素可以遍历,返回true,否则返回false 。          
  next()    获取元素...      
  remove()  移除迭代器最后一次返回 的元素。


NoSuchElementException 没有元素的异常。 
出现的原因: 没有元素可以被迭代了。。。

[java] view plain copy
 print?
  1. import java.util.ArrayList;  
  2. import java.util.Collection;  
  3. import java.util.Iterator;  
  4. public class Demo2 {  
  5.       
  6.     public static void main(String[] args) {  
  7.         Collection c = new ArrayList();  
  8.         c.add("狗娃");  
  9.         c.add("狗剩");  
  10.         c.add("铁蛋");  
  11.         c.add("美美");  
  12.       
  13.         /*//遍历集合的元素------>方式一: 可以使用toArray方法。 
  14.         Object[] arr = c.toArray(); // toArray()  把集合 的元素存储到一个 Object的数组中 返回。 
  15.         for(int i = 0 ; i<arr.length ; i++){ 
  16.             System.out.print(arr[i]+","); 
  17.         } 
  18.          
  19.         //要求使用iterator迭代器遍历。 
  20.         */  
  21.   
  22.         Iterator it = c.iterator();  //返回一个迭代器    疑问:iterator()方法返回的是一个接口类型,为什么接口又可以调用方法可以使用呢?  iterator 实际 上返回的是iterator接口的实现类对象。  
  23.         /* 
  24.         while(it.hasNext()){ // hasNext() 问是否有元素可以遍历。 
  25.             System.out.println("元素:"+ it.next()); //获取元素 
  26.         } 
  27.         */  
  28.           
  29.         /*it.next(); 
  30.         it.next(); 
  31.         it.remove();  //删除迭代器最后一次返回的元素。 
  32. */  
  33.           
  34.         //清空集合 的元素  
  35.         while(it.hasNext()){  
  36.             it.next();  
  37.             it.remove();  
  38.         }  
  39.           
  40.         System.out.println("集合的元素:"+ c);  
  41.           
  42.           
  43.           
  44.           
  45.     }  
  46.       
  47. }  

运行结果:
集合的元素:[]