集合类--容器
一.集合类:专门用来存储java类的对象,数组长度可变,存储的是引用型的元素对象,之所以可以存储基本类型数据是因为系统的自动装箱功能
二.容器关系图
三.Coolection接口是构造集合框架的基础,声明了所有集合类的核心方法
1 import java.util.ArrayList; 2 //removeAll移除指定集合(交集) 3 public class Demo_removeAll 4 { 5 public static void main(String[] args) 6 { 7 ArrayList a=new ArrayList(); 8 a.add("小"); 9 a.add("机"); 10 a.add("灵"); 11 a.add("鬼"); 12 13 ArrayList b=new ArrayList(); 14 b.add("小"); 15 16 a.removeAll(b); 17 System.out.println(a); 18 } 19 }
四.实现list接口的类
4.1.1 ArrayList(数组列表),可以把ArrayList看做一个长度可变的数组
4.1.2 add方法-->添加元素
get方法-->获取元素
size()-->元素个数
4.1.3 ArrayList集合底层是用数组来保存元素的,增加或删除元素,会导致创建新的数组,效率低,不适合做大量操作
1 import java.util.ArrayList; 2 3 public class Test14 4 { 5 public static void main(String[] args) 6 { 7 //定义一个数组列表 8 ArrayList array=new ArrayList(); 9 //使用add方法添加三个字符串值进去 10 array.add("不要为了合群而合群"); 11 array.add("那纯碎是浪费你的青春"); 12 array.add("努力最大的意义我终于明白了"); 13 //使用get方法获取数组列表中的元素 14 String s=(String) array.get(0); 15 String s1=(String) array.get(1); 16 String s2=(String) array.get(2); 17 18 System.out.println(s); 19 System.out.println(s1); 20 System.out.println(s2); 21 System.out.println("********************"); 22 23 for(int i=0;i<array.size();i++) 24 { 25 System.out.println(array.get(i)); 26 } 27 System.out.println("**********************"); 28 29 System.out.println(array.get(0)); 30 System.out.println(array.get(1)); 31 System.out.println(array.get(2)); 32 System.out.println("*********************"); 33 34 //添加几个数字进去 35 array.add(540); 36 array.add(8); 37 System.out.println(array.indexOf(540));//元素540的下标位置 38 } 39 }
4.2.1 LInkedLIst(链表)集合
引用的方式来链接所有元素,插入新元素-->修改元素之间的这种引用关系(就是对象地址)
五.实现set接口的类
5.1 hashCode类:根据对象哈希值来确定元素在集合中的位置
5.2 hashCode无序不可重复
5.3 添加对象时,先调用对象hashCode方法确定存储位置,再调用equals方法确保没有该位置重复元素(简单的理解就是不能添加相同引用对象,因为地址相同)
1 import java.util.HashSet; 2 3 public class Test15 4 { 5 public static void main(String[] args) 6 { 7 HashSet set=new HashSet();//创建HashSet对象 8 set.add(new Person("张三"));//传入引用对象元素 9 set.add(new Person("李四")); 10 set.add(new Person("张三"));//元素值虽然相同,但比较的是地址 11 12 System.out.println(set);//调用toString方法,set是无序的,不可重复 13 14 System.out.println("*************************"); 15 16 set.clear();//清空元素 17 18 Person p=new Person("张三"); 19 System.out.println(set.add(p));//若成功插入显示true 20 System.out.println(set); 21 //set添加新的元素时,会检查set中的原有元素是否和插入新元素equals 22 //若有则不能添加,返回false 23 System.out.println(set.add(p)); 24 25 System.out.println("**************"); 26 set.clear(); 27 String s1="小冰晶"; 28 String s2="小冰晶"; 29 System.out.println("hash code:"+s1.equals(s2));//证明了set接口是不重复 30 System.out.println(set.add(s1)); 31 System.out.println(set); 32 System.out.println(set.add(s2));//s2和s1地址相等 33 } 34 } 35 36 class Person 37 { 38 String name;//姓名属性 39 //构造方法初始化值 40 public Person(String name) 41 { 42 this.name=name; 43 } 44 //重写toString方法 45 public String toString() 46 { 47 return name; 48 } 49 }
六.Iterator迭代器
1 import java.util.HashSet; 2 import java.util.Iterator; 3 4 public class Demo_Iterator 5 { 6 public static void main(String[] args) 7 { 8 //创建HashSet对象 9 HashSet it=new HashSet(); 10 //添加元素对象 11 it.add("学"); 12 it.add("习"); 13 it.add("使"); 14 it.add("我"); 15 it.add("快"); 16 it.add("乐"); 17 //迭代器管理获得迭代对象 18 Iterator lo=(Iterator) it.iterator(); 19 //循环遍历 20 while(lo.hasNext())//用游标判断是否有下一个元素 21 { 22 String str=(String)lo.next(); 23 System.out.print(str+" "); 24 } 25 System.out.println(); 26 System.out.println("*******************"); 27 28 for(Iterator in=it.iterator();in.hasNext();) 29 { 30 String str1=(String)in.next(); 31 System.out.print(str1+" "); 32 } 33 } 34 }
七.映射接口Map-->给定一个关键字得到它的值,可理解为数学中的函数中的自变量和因变量的关系
7.1 Map接口不能出现重复的key
7.2 两个常用实现Map接口的类:HashMap(散列表实现)和TreeMap(二叉树原理)
1 /** 2 * void put(Object key,Object Value)指定键和与其相对应的映射值 3 * Set KeySet返回此映射中包含的键的Set视图 4 * Object get(Object key)放入键得到映射的值 5 */ 6 import java.util.HashMap; 7 import java.util.Iterator; 8 import java.util.Map; 9 import java.util.Set; 10 11 public class Demo_Map 12 { 13 public static void main(String[] args) 14 { 15 Map map=new HashMap();//创建Map接口对象-->父类引用指向子类对象 16 map.put("巫妖果子", "周俊明");//加入键值和对应的值 17 map.put("叩骨", "吴梦婷");//加入键值和对应的值 18 map.put("哒姐姐", "肖群");//加入键值和对应的值 19 20 System.out.println(map); 21 Set set=map.keySet();//获得存储Map中的所有键的set集合 22 23 for(Iterator it=set.iterator();it.hasNext();)//使用迭代器遍历键 24 { 25 String key=(String)it.next();//得到键 26 String value=(String)map.get(key);//输入键得到相应值 27 System.out.println(key+"="+value); 28 } 29 } 30 }
八.TreeMap
1 import java.util.Map; 2 import java.util.TreeMap; 3 /** 4 * TreeMap的特点: 5 * TreeMap底层采用的是二叉树算法,可以实现自动对键进行排序 6 * TreeMap可以保证键的顺序 7 * @author 罗摩衔那 8 * 9 */ 10 public class Demo_TreeMap 11 { 12 public static void main(String[] args) 13 { 14 Map<String,String>map=new TreeMap<>(); 15 map.put("001","小龙女"); 16 map.put("002","独孤求败"); 17 map.put("003","万古长空-妖帝空"); 18 map.put("004","一朝风月-妖帝月"); 19 System.out.println(map); 20 } 21 }