【Java】Collection 集合框架概述
Collection 集合框架概述
1、集合、数组都是为了存储数据而产生的
2、为什么需要集合?为了更灵活方便的存储数据,且集合能存储的容量比数组更大
3、存储的概念还停留在内存活动范围内,也只是短暂存储,不涉及硬盘存储
数组的弊端?
- 一定初始化之后,数组的长度不可再改变,长度固定
- 必须指明数组类型,存储的类型也要受到限制
- 可操作的方法有限,且效率不高
- 有序,可重复的数据,不能存储无序的数据
Java集合体系:
Collection & Map
collection 存储单列数据,类似,数组
map 存储两列数据,是一种映射关系 K V对,且K必须唯一,V可以重复
collection再往下细分为 List & Set
- List 元素是可重复的,有序的
- Set 元素是不可重复,无序的
可以说Map的Key就相当于Set,然后Value就是List
其中Map的获取所有的key和所有的value就明示了这个意思
获取所有Key,map.ketSet()
获取所有Value,map.values()
List 的三个主要实现类
- Vector 初代目的ArrayList,种种原因已经弃用了
- ArrayList 数组列实现类,可以理解为一个长度可变化和类型兼容的数组,有序的,增删麻烦,查找快
- LinkedList 链式列实现类,特性在于无序的,实现增删容易,但是查找困难
Set的三个主要实现类
- HashSet
- LinkedHashSet
- TreeSet
Map接口的几个实现类
- HashMap
- LinkedHashMap
- TreeMap
- HashTable
- Properties
Collection通用操作的方法
Collections的主要方法1:
1 public class CollectionTest { 2 public static void main(String[] args) { 3 // 演示使用的是集合下面的一个实现类 4 Collection collection = new ArrayList(); 5 6 // 添加一个任意类型元素,可返回一个布尔值以查看是否添加成功 7 boolean add = collection.add("AA"); 8 System.out.println("add ? " + add); 9 collection.add(123); 10 collection.add(true); 11 collection.add(new Date()); 12 13 // 返回集合容器的大小,或者说元素个数 14 int size = collection.size(); 15 System.out.println("size ? " + size); 16 17 18 Collection collection2 = new ArrayList(); 19 collection2.add("2的元素1"); 20 collection2.add("2的元素2"); 21 // addAll(Collection collection)方法 把参数的集合对象的全部元素全部注入到调用此方法的集合对象中 22 collection.addAll(collection2); 23 24 System.out.println(collection); 25 26 // 清除集合内的元素 27 collection2.clear(); 28 29 // isEmpty(Object obj) 判断集合元素中是否还有元素 30 boolean empty = collection2.isEmpty(); 31 System.out.println("empty ? " + empty); 32 33 /* 34 增加元素 add(Object obj) 35 导入元素 addAll(Collection collection) 36 非空判断 isEmpty() 37 清空元素 clear() 38 */ 39 40 // contains(Object obj);是否包含某一元素? 41 boolean contains = collection.contains("AA"); 42 System.out.println(contains); 43 44 // containsAll(Collection collection);参数的集合容器中的所有元素是否在调用此方法的集合容器中都存在? 45 boolean containsAll = collection.containsAll(collection2); 46 // Arrays.asList(Object ...elements) 将数个元素装进至ArrayList集合中 47 48 /* 49 contains(Object obj); 50 containsAll(Collection collection); 51 */ 52 53 // 移除元素,存在执行移除,返回true 反之false 54 boolean remove = collection.remove(true); 55 System.out.println(remove); 56 57 // 把参数的集合容器的所有元素,在调用此方法的集合对象中全部移除 58 boolean removeAll = collection.removeAll(collection2); 59 60 /* 61 remove(Object obj) 62 removeAll(Collection collection) 63 */ 64 65 // 求集合1和集合2共有的元素,并返回给当前调用此方法的集合,如果一个都没有则返回false 66 boolean retainAll = collection.retainAll(collection2); 67 System.out.println(retainAll); 68 System.out.println(collection); 69 70 // equals() 集合和集合之间的比较,两者的元素一模一样返回true 71 collection.equals(collection2); 72 73 // 转换为数组 因为没有规定泛型类型,所以默认Object类型 74 Object[] objects = collection.toArray(); 75 76 /* 77 static List Arrays.asList(); 转集合对象 78 Object[] toArray(); 转数组对象 79 */ 80 } 81 }
Collections的主要方法2:
迭代器对象的使用
1 public class CollectionTest { 2 public static void main(String[] args) { 3 List list = new ArrayList(); 4 list.add(100); 5 list.add(200); 6 list.add(300); 7 // 获取该集合对象的迭代器对象 8 Iterator iterator = list.iterator(); 9 10 // 判断该集合是否还有下一个元素 11 while (iterator.hasNext()){ 12 //如果有就返回当前元素,并指向下一个元素 13 Object next = iterator.next(); 14 System.out.print(next + "\t"); 15 } 16 17 // iterator.hasNext() 这个迭代器处在集合容器 -1 索引位置 18 // 它会判断下一个索引位置上面是否还有元素存在,类似游标的作用 19 20 // next(); 将迭代器对象iterator向下一个索引移动, 21 // 并返回这个索引位置集合容器的元素(没有泛型,返回Object) 22 23 // remove(); 移除元素? 24 // 当遍历到指定的元素时可以equals(obj)判断,为true 调用iterator.remove()方法移除 25 } 26 }
JDK5提供的循环语法糖
ForEach的底层实现就是Iterator迭代器
public class CollectionTest { public static void main(String[] args) { List list = new ArrayList(); list.add(100); list.add(200); list.add(300); //使用ForEach遍历 for (Object object:list){ System.out.println(object); } } }