- 存儲不同類型的對象:
- Object[] arr=new object[5];
- 數組的長度是固定的, 添加或刪除數據比較耗時
- 集合:
- Object[] toArray
- 可以存儲不同類型的對象
- 隨著存儲的對象的增加,會自動的擴容
- 集合提供了非常豐富的方法,便于操縱
- 集合相當于容器,可以存儲多個對象
- 集合存的是對象的引用
每種集合存儲數據的方式不同,使用的數據結構不同,有各自的優缺點
在項目中根據底層的數據結構選擇適合的集合使用。
共性方法
Collection中定義的是最共性的方法:
-
添加
- boolean add(Object o)
多態集合中存儲的都是對象集合中存儲的是對象的地址 - boolean addAll(Collection<? extends E> c)
把另一個集合中的數據加入到當前集合
Collection col=new ArrayList(); col.add("java"); col.add("html"); col.add("mysql"); col.add(66); Collection col2=new ArrayList(); col2.add("bigdata"); col2.add("python"); col.addAll(col2); sop(col);//[java, html, mysql, 66, bigdata, python]
- boolean add(Object o)
-
刪除
- boolean remove(Object o)
從集合中刪除某個對象 - boolean removeAll(Collection<?> c)
從當前集合中刪除和另一個集合相同的數據 - boolean retainAll(Collection c)
從當前集合中保留和另一個集合相同的數據 - void clear()
清空集合 - boolean removelf(Predicate predicate) boolean test(T t)
依次遍歷集合中的每個對象,如果test方法返回true,則刪除這個對象
//使用匿名內部類實現test方法: col.removeIf(new Predicate(){public boolean test(Object t){//參數用來依次接收集合中每個對象if(t instanceof String){String ss=(String)t;if(ss.startsWith("java"))return true;}return false;} });
//使用lambda表達式實現test方法: col.removeIf(t->{if(t instanceof String){String ss=(String)t;if(ss.startsWith("java"))return true;}return false; }); //簡化書寫: col.removeIf(t->((String)t).startsWith("java"));
- boolean remove(Object o)
-
判斷
- boolean contains(Object o)
判斷是否包含某個對象
依據equals方法判斷是否包含某個元素
import java.util.*; class Demo2{public static void main(String[] args){ArrayList list=new ArrayList();list.add(new Student("zhangsan",20));list.add(new Student("lisi",25));list.add(new Student("lisi",25));//姓名年齡相同的認為是同一個對象,去重ArrayList list2 = quChong(list);System.out.println(list2);}//去除集合中重復的元素public static ArrayList quChong(ArrayList list){ArrayList list2=new ArrayList();for(int i=0;i<list.size();i++){Object obj = list.get(i);//判斷新集合中是否包含該元素if(!list2.contains(obj))//依據equals方法判斷是否包含list2.add(obj);}return list2;} } class Student{………………public boolean equals(Object obj){if(!(obj instanceof Student))throw new ClassCastException("類型不對");Student stu=(Student)obj;return this.name.equals(stu.name)&&this.age==stu.age;} }
- boolean containsAll(Collection<?> c)
判斷是否包含另一個集合中的所有對象 - boolean isEmpty()
判斷集合是否為空 - boolean equals(Object o)
判斷兩個集合中的對象是否都一致
- boolean contains(Object o)
-
獲取
- Iterator iterator()
獲取集合中的對象
在使用迭代器迭代的過程中不允許對集合進行添加,修改,刪除元素
Iterator ite = col.iterator();//得到集合的迭代器 while(ite.hasNext()){Object obj = ite.next();//col.add("haah"); //ConcurrentModificationException //在使用迭代器迭代的過程中不允許對集合進行添加,修改,刪除元素System.out.println(obj); } while(ite.hasPrevious()){Object obj=ite.previous();System.out.println(obj); }
- default void forEach(Consumer<? super T> action) void accept(T t) 參數用來依次接收集合中的每個對象
col.forEach(t->System.out.println(t)); col.forEach(System.out::println);
- int size()
獲取集合中對象的個數
- Iterator iterator()
-
集合變數組
- Object[] toArray()
防止被隨意地添加或刪除
- Object[] toArray()
-
遍歷集合的三種方式
- Iterator iterator()
- forEach()
- 增強的for循環可以用于數組和Collection集合
for(Object obj:col) {System.out.println(obj); }