zoukankan      html  css  js  c++  java
  • 【宋红康学习日记21】集合

    集合

    1 集合用来存储多种类型数据的数量不等的对象,与数组一旦创建长度就须固定的限制不一样。
    2 集合主要有
    |-----Collection接口:
    |-----List接口:存储有序可重复元素,主要实现类:ArrayList、LinkedList、Vector
    |-----Set接口:存储无序不可重复元素,主要实现类:HashSet、LinkedHashSet、TreeSet
    |-----Map接口:用来存储具有一一对应关系的数据,主要实现类:HashMap、LinkedHashMap、TreeMap、Hashtable(Properties)

    Collection接口
    1 Collection常用方法:

      1 package org.exe.集合;
      2 //01
      3 public class TestCollection1 {
      4 
      5     @Test
      6     public void test1(){
      7         //创建对象
      8         Collection col1=new ArrayList();
      9         //1 add(Object obj)添加集合对象
     10         System.out.println(col1.size());//未创建之前长度为0
     11         col1.add(123);
     12         col1.add("I LOVE YOU");
     13         col1.add(new Date());        
     14         //2 size()  返回集合长度
     15         System.out.println("col1集合长度为"+col1.size());//创建后长度为3        
     16         //3 addAll() 将集合1中所有元素添加到当前集合中
     17         Collection col2=new ArrayList();
     18         col2.addAll(col1);
     19         System.out.println("添加了col1集合后的col2集合长度应该是"+col2.size());        
     20         //4 isEmpty();
     21         System.out.println("col2中元素是否为空true/false"+"  "+col2.isEmpty());
     22         //5 clear();清空集合元素
     23         System.out.println("-------------------col2中元素开始清除中----------");
     24         col2.clear();
     25         System.out.println("col2中元素是否为空true/false"+"  "+col2.isEmpty());                
     26         System.out.println("------------------------------------------------");
     27         //打印集合名,可打印出集合中元素,说明ArrayList中syso重写了
     28         System.out.println("col1中元素为  "+col1);
     29         System.out.println("col2中元素为  "+col2);                
     30     }
     31     @Test
     32     public void test2(){
     33         //创建对象
     34                 Collection col3=new ArrayList();
     35                 col3.add(1126);
     36                 col3.add("今天是11月26日感恩节祝大家节日快乐");
     37                 col3.add(new Date());
     38                 col3.add("AAAA");                
     39                 System.out.println(col3);
     40                 //6 contains(Object obj):判断是否存在obj元素   返回boolean值
     41                 //判断依据:根据元素所在类的equals()方法进行判断(一般是判断地址值,Strin等都重写了)
     42                 //自定义类要重写equals()方法
     43                 System.out.println("是否存在1126  "+col3.contains(1126));
     44                 System.out.println("是否存在11  "+col3.contains(11));
     45                 System.out.println("是否存在AA  "+col3.contains("AA"));
     46                 System.out.println();
     47                             
     48                 //6.1 可添加自定义类
     49                 Person p=new Person("王根深",24);
     50                 col3.add(p);
     51                 //看col3中是否存在p
     52                 boolean b1=col3.contains(p);
     53                 System.out.println("col3中是否存在p  "+b1);//true
     54                 
     55                 //若改成匿名类
     56                 col3.add(new Person("王根深",24));
     57                 //看col3中是否存在匿名类
     58                 boolean b2=col3.contains(new Person("王根深",24));
     59                 System.out.println("col3中是否存在匿名类  "+b2);//false  当在Person重写HashCode后就变味true
     60                 
     61               //7 containAll(Collection e)  e是否为前面子集  返回boolean值
     62                 Collection col4=new ArrayList();
     63                 col4.add(1126);
     64                 col4.add("今天是11月26日感恩节祝大家节日快乐");
     65                 col4.add("AAAA");
     66                 boolean b3=col3.containsAll(col4);
     67                 System.out.println("col3中是否存在col4  "+b3);
     68                 
     69               //8 retainAll(Collection e)  返回  boolean值  求交集   范围大的将会只剩下交集部分
     70                 col3.retainAll(col4);
     71                 System.out.println(col3);                    
     72     }
     73     @Test
     74     public void test3(){
     75         Collection col5=new ArrayList();
     76         col5.add(1);
     77         col5.add(2);
     78         col5.add(3);
     79         col5.add(4);
     80         col5.add(55);
     81         
     82         Collection col6=new ArrayList();
     83         col6.add(1);
     84         col6.add(2);
     85         
     86         //9 remove(Object obj)   删除集合中元素,若删除成功,返回true
     87         col5.remove(33);
     88         col5.remove(55);
     89         System.out.println(col5);
     90         System.out.println();
     91         //10 removeAll(Collection e) 差集  返回boolean
     92         col5.removeAll(col6);
     93         System.out.println(col5);
     94         
     95         //11 equals(object obj)判断两个集合是否相等 
     96     }
     97     @Test
     98     public void test4(){
     99         Collection col1=new ArrayList();
    100         col1.add(1);
    101         col1.add(2);
    102         
    103         Collection col2=new ArrayList();
    104         col2.add(1);
    105         col2.add(2);
    106         
    107         Collection col3=new ArrayList();
    108         col3.add(111);
    109         col3.add(222);
    110         
    111         //11 equals(object obj)判断两个集合所有元素是否相等 
    112         boolean b1=col1.equals(col2);
    113         System.out.println("col1和col2是否相等true/false  "+b1);
    114         b1=col1.equals(col3);
    115         System.out.println("col1和col3是否相等true/false  "+b1);
    116         
    117         //12 hashcode()
    118         System.out.println("col1.hashCode()是"+col1.hashCode());
    119         System.out.println("col2.hashCode()是"+col2.hashCode());
    120         System.out.println("col3.hashCode()是"+col3.hashCode());
    121         //13 toArray():将集合转化为数组
    122         Object[] obj=col1.toArray();
    123         for(int i=0;i<obj.length;i++){
    124             System.out.println(obj[i]);
    125         }
    126         //数组化成集合
    127         Collection collection=Arrays.asList(1,2,3);
    128         //14 iterator():返回一个Iterator接口实现类的对象
    129         Iterator iterator=col1.iterator();        
    130         System.out.println("--------------------------");
    131        while(iterator.hasNext()){
    132            System.out.println(iterator.next()); 
    133          }        
    134     }
    135

    2 迭代器

     1 public class TestIterator2 {
     2     //方式一:
     3     @Test
     4     public void test1(){
     5 
     6         String str[]=new String[]{"AA","BB","dd"};
     7         for(int i=0;i<str.length;i++){
     8             System.out.println(str[i]);
     9         }
    10     }
    11     //方式二:
    12     @Test
    13     public void test2(){
    14         String str[]=new String[]{"AAAAA","BBBBBB","dDDDd"};
    15         for (String s : str) {
    16             System.out.println(s);
    17         }
    18     }
    19     //方式三:
    20         @Test
    21         public void test3(){
    22             Collection col5=new ArrayList();
    23             col5.add(1);
    24             col5.add(2);
    25             col5.add(3);
    26             col5.add(4);
    27             col5.add(55);
    28             Iterator i=col5.iterator();
    29             while(i.hasNext()){
    30                 System.out.println(i.next());
    31             }
    32             
    33         }

    一 List接口:存储有序可重复元素
    1.1 ArrayList(List主要实现类)
    1) ArrayList相对于Collection新增加的方法:
    ①增 void add(Object obj)
    ②删 Object remove(Object obj)或remove(int index)
    ③改 Object set(int index,Object obj)
    ④查 Object get(int index)
    ⑤插 void add(int index,Object obj)
    1.2 LinkedList(对于频繁插入、删除操作)
    1.3 Vector:古老的实现类,线程安全,不常用。

     

    二 Set接口:存储无序不可重复元素
    2.1 HashSet(Set主要实现类)
    1)无序性:添加元素后遍历元素,会呈现无序性,值得是元素在底层存储的位置是无序的,由HahsCode决定。
    2)不可重复性:要求添加元素所在的类必须要重写equals()和HashCode()方法。
    2.2 LinkedHashSet
    1)遍历集合中元素时是按添加顺序遍历的,这是因为内部使用一个链表维护了一个添加集合中元素的顺序。
    2.3 TreeSet
    1)向TreeSet中添加元素时要求元素必须是同一类的;
    2)可以指定按添加的某一元素顺便遍历;
    3)两种排序方法:
    |-----自然排序: ①要求添加元素所在类要实现Comparable接口,并在该类中重写compareTo(Object obj)方法;
    ②在此方法中指明按照哪个属性进行排序。
    !!!要求:compareTO()与HashCode()、equals()方法一致

    |-----定制排序: ①在测试类中new一个Comparator(){
             ②在这里重写compareTo()方法;
           };
          ③将此对象作为形参传给TreeSet构造器

     

        

    Map接口:具有函数关系的一一对应的关系
    1 key是用Set来存放的,不可重复 Set s=map.keySet()
    Values是用Collection存放的,可重复;Collection c=map.values();
    Entry:一个Key-Values对,不可重复。

     

    一 HashMap接口
    1 向HashMap中添加元素时,会调用key所在类的equals()方法,判断key值是否相等,若相等,后添加的会将前者覆盖;
    2 常用方法
    ①增 Object put(Object key,Object value)
    ②删 Object remove(Object key)
    ③改 Object set(int index,Object obj)
    ④查 Object get(Object obj)
    3 遍历
    ①遍历key值

    1 //1 遍历key(Set)
    2         Set set=map.keySet();
    3         for (Object object : set) {
    4             System.out.println(object);
    5         }

    ②遍历value值

    1 //2 遍历value集(Collection)
    2         Collection set2=map.values();
    3 //        for (Object object : set) {
    4 //            System.out.println(object);
    5 //        }
    6         Iterator i=set2.iterator();
    7         while(i.hasNext()){
    8             System.out.println(i.next());
    9         }

    ③遍历entry值

     1 //3 遍历key-value
     2         /*Set set3=map.keySet();
     3         for (Object obj : set3) {
     4             System.out.println(obj+"-------------->"+map.get(obj));
     5         }*/
     6         Set set4=map.entrySet();
     7         for (Object obj : set4) {
     8             Map.Entry entry=(Map.Entry)obj;
     9             System.out.println(entry);
    10         } 

     


    二 LinkedHashMap
    三 TreeMap:按照添加进Map中的元素的key指定属性进行排序
    1 自然排序
    2 定制排序

     


    四 Hashtable(不能存null)
    子类:Properties常用来处理属性文件,键和值都是String类型的。

    1     public void testHashtable() throws FileNotFoundException, IOException{
    2         Properties pros=new Properties();
    3         pros.load(new FileInputStream(new File("wgs.properties")));
    4         String user=pros.getProperty("user");
    5         System.out.println(user);
    6         String code=pros.getProperty("password");
    7         System.out.println(code);
    8         
    9     }

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    spring mvc 数据格式化
    spring mvc 数据转换
    spring mvc
    spring
    java+hibernate+mysql
    Jenkins使用TFS部署
    Docker基本命令
    MySQL主从配置
    Jenkins邮箱设置
    vlc 控件属性和方法
  • 原文地址:https://www.cnblogs.com/noaman/p/5014675.html
Copyright © 2011-2022 走看看