集合
集合类是Java数据结构的实现。它允许以各种方式将元素分组,并定义了各种使这些元素更容易操作的方法。Java集合类是Java将一些基本的和使用频率极高的基础类进行封装和增强后再以一个类的形式提供。集合类是可以往里面保存多个对象的类,存放的是对象,不同的集合类有不同的功能和特点,适合不同的场合,用以解决一些实际问题。
为什么要使用集合?
回想数组,数组在某些方面达不到我们的要求。
数组不足:
-
数组长度固定 不可改变
-
数组无法求出真实有效的个数
-
用数组实现 对象的增删改查操作比较麻烦
集合
集合是一个接口 一些collection允许有重复元素 而另一些则不允许 一些collection是有序的 而另一些是无序的
Collection
-
Collection的长度会自动适应 无需人工干预
-
Collection的size()方法可以获取到元素的真实个数
-
用集合实现对象的增删改查 很方便 直接调用add()方法
1 package col; 2 import java.util.ArrayList; 3 import java.util.Collection; 4 public class CollectionTest { 5 public static void main(String[] args) { 6 //add(E e);向集合中添加一个元素 7 // Collection collection = new Collection(); //接口不能被实例化,用其实现类 8 Collection collection = new ArrayList(); 9 collection.add("a"); 10 collection.add("b"); 11 collection.add("c"); 12 13 System.out.println(collection); //重写了toString()方法 14 //clear:清空集合中所有元素 15 collection.clear(); 16 System.out.println(collection); 17 18 //创建3个学生对象 19 Student student =new Student(); 20 student.setName("张三"); 21 student.setAge(20); 22 collection.add(student);//创建第二个学生 23 24 Student student1 = new Student(); 25 student1.setAge(22); 26 student1.setName("李四"); 27 collection.add(student1); 28 29 //创建第三个学生 30 Student student2 = new Student(); 31 student2.setAge(22); 32 student2.setName("王五"); 33 34 collection.add(student2); 35 System.out.println(collection); 36 //求集合中真实数据 37 System.out.println(collection.size()); 38 39 //此时 collection已有三个元素 40 41 Collection collection1 = new ArrayList(); 42 collection1.add("a"); 43 collection1.add("b"); 44 collection1.add("c"); 45 //此时 collection1也有三个元素 46 47 //addAll()可以将一个集合中的全部元素 添加到另一个集合之中 48 collection.addAll(collection1); 49 System.out.println(collection); 50 //contains():判断集合是否包含了指定的对象(元素) 51 System.out.println(collection.contains("a")); 52 System.out.println(collection.contains(student)); 53 //containsAll(): 54 } 55 }
Collection有两个子接口,分别是List接口、Set接口。
List: 存储的数据是 不唯一、有序的对象
Set: 存储的数据是 唯一、无序的对象
唯一:不能重复 反之不唯一就能重复
有序:不是排序 ;是输入顺序是否与输出顺序一致
1 package col; 2 3 import java.util.ArrayList; 4 import java.util.Collection; 5 import java.util.HashSet; 6 import java.util.LinkedList; 7 8 public class Demo1 { 9 public static void main(String[] args) { 10 Collection list = new ArrayList(); 11 list.add("中国"); 12 list.add("美国"); 13 list.add("俄罗斯"); 14 System.out.println(list); 15 16 LinkedList list2 = new LinkedList(); 17 list2.add("hello"); 18 list2.add("world"); 19 //LinkedList独有的方法 20 list2.addFirst("xw"); 21 list2.addLast("sg"); 22 System.out.println(list2); 23 //根据索引删 24 list2.remove(1); 25 System.out.println(list2); 26 //根据内容删 27 list2.remove("xw"); 28 System.out.println(list2); 29 30 Collection set = new HashSet(); 31 set.add("中国"); 32 set.add("俄罗斯"); 33 set.add("美国"); 34 System.out.println(set); 35 //set中的remove()为什么只能根据内容删 不能根据下标删? 36 //因为set是无序的(没有顺序)程序不知道谁是第几个 无法根据下标删除 只能根据内容删除 37 set.remove("美国"); 38 System.out.println(set); 39 } 40 }
Map(key value) :Map中key是唯一的 value不唯一
删除:
Collection中的类(List Set),删除的返回值是Boolean值
Map中的类 是根据key删除 返回值是value
1 package col; 2 3 import java.util.Collection; 4 import java.util.HashMap; 5 import java.util.Set; 6 7 public class Demo2 { 8 public static void main(String[] args) { 9 HashMap map = new HashMap(); 10 map.put("s01","张三");//key 学号 value:姓名 11 map.put("s02","李四"); 12 map.put("s03","王五"); 13 14 System.out.println(map); 15 //根据key找value 16 Object v = map.get("s01"); 17 System.out.println(v); 18 //元素个数 19 System.out.println(map.size()); 20 //判断是否 包含指定的Key 21 System.out.println(map.containsKey("s01")); 22 //判断是否 包含指定的value 23 System.out.println(map.containsValue("张三")); 24 25 //将map转为单值集合 26 //转为只包含了key的单值集合 27 Set set = map.keySet(); //为什么是set 而不是list: Map中key是唯一的 28 System.out.println(set); 29 //转为只包含了value的单值集合 30 Collection values = map.values(); 31 System.out.println(values); 32 33 //移除的是map中的key 34 map.remove("s01"); 35 System.out.println(map); 36 } 37 }
如何遍历集合? list set map
-
循环(普通for[只适用于有序的] 增强for【建议】)
-
迭代器
遍历map 将双值集合 转为单值集合
map ->keySet
通过key获取value map.get(key)
map ->values
1 package col; 2 3 import java.util.*; 4 5 public class Demo3 { 6 public static void main(String[] args) { 7 List list = new ArrayList(); 8 list.add("aa"); 9 list.add("bb"); 10 list.add("cc"); 11 //普通for 12 for (int i = 0;i<list.size();i++){ 13 System.out.println(list.get(i)); 14 } 15 System.out.println("增强for"); 16 for(Object l:list){ 17 System.out.println(l); 18 } 19 20 Set set = new HashSet(); 21 set.add("A"); 22 set.add(1); 23 set.add("B"); 24 for (Object s: set) { 25 System.out.println(s); 26 } 27 System.out.println("迭代器"); 28 Iterator iterator = set.iterator(); 29 while (iterator.hasNext()){ 30 Object next = iterator.next(); 31 System.out.println(next); 32 } 33 34 System.out.println("遍历map"); 35 Map map = new HashMap(); 36 map.put("s01","zs"); 37 map.put("s02","ls"); 38 map.put("s03","ww"); 39 Set set1 = map.keySet(); //将双值集合 降成单值集合 40 for(Object s:set1){ 41 System.out.println("key:"+s); 42 } 43 Collection values1 = map.values(); 44 Iterator iterator1 = values1.iterator(); 45 while (iterator1.hasNext()){ 46 Object next = iterator1.next(); 47 System.out.println("value:"+next); 48 } 49 50 System.out.println("通过entry遍历。。"); 51 Set entries = map.entrySet(); 52 for(Object e:entries){ 53 Map.Entry et = (Map.Entry) e; 54 Object key = et.getKey(); 55 System.out.println("key:"+key); 56 Object value = et.getValue(); 57 System.out.println("value:"+value); 58 } 59 } 60 }