- 存储不同类型的对象:
- 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); }