集合类--容器

一.集合类:专门用来存储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 }

 

 

posted @ 2018-11-27 21:50  静心*尽力  阅读(157)  评论(0编辑  收藏  举报