java的集合框架java
-
java.util.Collection接口
1.Collection:是全部集合的顶级接口,里面规定了集合操做元素的相关功能方法集合与数组同样,用于存储一组元素,可是集合又多个不一样的实现类来实现不一样的数据结构
android -
Collection下面有两个常见的子接口
*1.1 java.util.List: *线性表,特色:能够存放重复元素而且有序,能够经过下标操做
List常见的实现类:
1.1.1:java.util.ArraysList
内部使用数组实现,查询性能更好
1.1.2java.util.LinkedList
内部用链表实现,增删元素性能更好,首尾增删元素性能最佳
1.2: java.util.Set:不能够重复的集合,而且无序
Set常见的实现类:java.util.HashSet
ios -
这里的重复元素断定是依靠元素自身equals方法比较的结果而定c++
Collection c = new ArrayList();
boolean add(E e):向当前集合添加一个元素,成功添加后返回true不然返回false
数组
c.add("one");
int size():返回当前集合的元素个数安全
int size = c.size();
boolean isEmpty():判断集合是否为空集,当集合的size为0时,isEmpty返回true数据结构
boolean isEmpty = c.isEmpty();
c.clear():清空集合框架
boolean contains(Object o):判断当前集合是否包含给定元素
集合的contains判断包含时的依据为:给定元素是否与集合中现有的元素存在equals比较为true的状况,存在则认为包含
工具
boolean contains = c.contains(p);
remove方法删除元素时也是删除与集合中equals比较为true的,元素对于List集合而言,重复元素仅删除一次性能
c.remove(p);
集合只能存放引用类型元素,而且存放的是元素的引用(地址)
Point p = new Point(1,2); c.add(p); p.setX(2); //修改p的第一个参数为2:(2,2)
boolean addAll(Collection c):将给定集合中的全部元素添加到当前集合
Collection c1 = new ArrayList(); c1.add("java"); c1.add("c++"); Collection c2 = new ArrayList(); c2.add("android"); c2.add("ios"); c1.addAll(c2);
boolean containsAll(Collection e):判断当前集合是否包含给定集合中的全部元素
Collection c3 = new ArrayList(); c3.add("java"); boolean contains = c1.containsAll(c3);
removerAll:删除当前集合中与给定集合的共有元素
c1.removeAll(c3);
集合的遍历
- Collection提供了一个方法
- Iterator iterator()
- 该方法会返回一个用于遍历当前集合的迭代器实现类,使用它能够对集合进行遍历
java.util.Iterator接口:迭代器
- 迭代器中规定了遍历集合元素所须要的相关方法,使用迭代器遍历遵循的原则为:问,取,删,其中删除元素不是遍历过程当中的必要操做
- 注:不一样的集合实现类都提供l一个用于遍历自身的迭代器实现类,咱们不须要知道它们的名字,用多态的思想把它们当作Iterator进行操做便可.
JDK5推出时推出了一个新特性:泛型
泛型又称为参数实例化类型,容许咱们咱们在使用一个类型的时候去指定它里面某些属性或方法的参数和返回值的类型,使得咱们使用这个类时更符合咱们的需求
泛型在集合中被大量使用,用于规定集合中的元素类型
Collection<String> c = new ArrayList<>(); c.add("one"); c.add("#"); c.add("two"); c.add("#"); c.add("three"); System.out.println(c); // 迭代器也支持泛型,使用时指定的类型与集合元素类型一致便可 Iterator<String> it = c.iterator(); // boolean hasNext():判断集合是否还有元素能够迭代 while (it.hasNext()){ // E next():获取集合下一个元素(第一次调用时获取第一个元素,以此类推) String str = it.next(); System.out.println(str); if ("#".equals(str)){ /* 迭代器有一个要求,在遍历的过程当中不能经过集合的方法 增删元素,不然会出现异常 */ /* 迭代器提供的remover方法能够删除本次遍历出来的元素 */ it.remove(); } }
java.util.List接口:
List list = new ArrayList<>();
E get(int index):获取指定下标所对应的元素
E set(int index,E e):将给定元素设置到指定位置,返回值为该位置原有元素
void add(int index,E e):将给定元素添加到指定位置,原位置及后续元素顺序向后移动
list.add(2,"3");
E remove(int index):删除并返回指定位置的元素
String old = list.remove(3);
List subList(int start,int end): 获取当前集合指定范围内的子集
List<Integer> list = new ArrayList<>(); for(int i=0;i<10;i++){ list.add(i); } System.out.println(list); List<Integer> subList = list.subList(3,8); System.out.println(subList); //将子集每一个元素扩大10倍 for (int i=0;i<subList.size();i++){ int a = subList.get(i); int b = a*10; subList.set(i,b); } System.out.println(subList); *//* 当咱们经过一个List集合获取到一个子集后,对这个子集的任何操做 就是对原集合这段元素的操做 *//* System.out.println(list);
加强型for循环 JDK5推出时推出的一个新特性
- 它也称为:加强for循环
- 新循环不取代传统的for循环的工做,它只是用相同的语法去遍历集合或数组使用
- 新循环是编译器承认,而不是java虚拟机承认,编译器在编译源代码时发现使用新循环遍历数组时,会将代码改成普通的for循环进行
- 新循环遍历集合会被编译器修改成迭代器遍历 所以在使用新循环遍历过程当中,仍然不能经过集合的方法增删元素
集合转换为数组:Collection提供了一个方法:toArray(),能够将当前集合转换为一个数组
将当前集合转换为数组,该方法要求传入一个数组,若是该数组能够用(数组长度>=集合的size时)会将当前集合元素存入该数组后再将该数组返回
若是不能够用会建立一个与参数数组同类型而且长度与size一致的数组并将元素存放后返回
Collection<String> c = new ArrayList<>(); //集合 String[] array = c.toArray(new String[c.size()]); //数组
数组转换为集合:数组的工具类:Arrays提供了一个静态方法:asList,能够将一个数组转换为一个List集合
-
经过数组转化而来的集合,对该集合的元素操做就是对原数组的操做这一点须要特别注意!
-
因为数组是定长的,所以从从数组转换的集合不能够调用增删元素等会影响数组的长度,不然会抛出异常:UnsupportedOperationException
若是想向集合中增删元素,须要执行建立一个集合,而后将原集合元素导入到该集合便可
全部的集合元素都支持一个参数类型为Collection的构造方法,做用是在建立当前集合的同时包含给定集合中的全部元素
String[] array = {“one”,“two”,“three”,“four”,“five”}; //数组
List list = Arrays.asList(array); //集合
Collection和Collections的区别
**Collection:**是全部集合的顶级接口,规定了全部集合都要具有的功能。集合与数组同样,用于保存一组元素,可是实现类众多(有多种不一样的数据结构) **Collections:**是个一个工具类,提供了一系列的静态方法来辅助容器操做,这些方法包括对容器的搜索、排序、线程安全化等等。