• 集合框架的详解,List(ArrayList,LinkedList,Vector),Set(HashSet,TreeSet)-(14)


     

     

    集合详解:

     1 /*
     2 Collection
     3     |--List:元素是有序的,元素可以重复。因为该集合体系有索引。
     4         |--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
     5         |--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
     6         |--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。
     7 
     8 
     9     |--Set:元素是无序,元素不可以重复。、
    10 
    11 
    12 List:
    13     特有方法。凡是可以操作角标的方法都是该体系特有的方法。
    14 
    15 16     add(index,element);
    17     addAll(index,Collection);
    18 
    19 20     remove(index);
    21 
    22 23     set(index,element);
    24 25     get(index):
    26     subList(from,to);
    27     listIterator();
    28     int indexOf(obj):获取指定元素的位置。
    29     ListIterator listIterator();
    30 
    31 
    32 
    33 
    34 
    35 List集合特有的迭代器。ListIterator是Iterator的子接口。
    36 
    37 在迭代时,不可以通过集合对象的方法操作集合中的元素。
    38 因为会发生ConcurrentModificationException异常。
    39 
    40 所以,在迭代器时,只能用迭代器的放过操作元素,可是Iterator方法是有限的,
    41 只能对元素进行判断,取出,删除的操作,
    42 如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。
    43 
    44 该接口只能通过List集合的listIterator方法获取。
    45 
    46 */
    47 
    48 /*
    49 |--Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。、
    50     |--HashSet:底层数据结构是哈希表。是线程不安全的。不同步。
    51             HashSet是如何保证元素唯一性的呢?
    52             是通过元素的两个方法,hashCode和equals来完成。
    53             如果元素的HashCode值相同,才会判断equals是否为true。
    54             如果元素的hashcode值不同,不会调用equals。
    55 
    56             注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。
    57 
    58 
    59     |--TreeSet:
    60 
    61 Set集合的功能和Collection是一致的。
    62 
    63 
    64 
    65 
    66 */

     

     

     

      1 /*
      2 Collection
      3     |--List:元素是有序的,元素可以重复。因为该集合体系有索引。
      4         |--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
      5         |--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
      6         |--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。
      7 
      8 
      9     |--Set:元素是无序,元素不可以重复。、
     10 
     11 
     12 List:
     13     特有方法。凡是可以操作角标的方法都是该体系特有的方法。
     14 
     15  16     add(index,element);
     17     addAll(index,Collection);
     18 
     19  20     remove(index);
     21 
     22  23     set(index,element);
     24  25     get(index):
     26     subList(from,to);
     27     listIterator();
     28     int indexOf(obj):获取指定元素的位置。
     29     ListIterator listIterator();
     30 
     31 
     32 
     33 
     34 
     35 List集合特有的迭代器。ListIterator是Iterator的子接口。
     36 
     37 在迭代时,不可以通过集合对象的方法操作集合中的元素。
     38 因为会发生ConcurrentModificationException异常。
     39 
     40 所以,在迭代器时,只能用迭代器的放过操作元素,可是Iterator方法是有限的,
     41 只能对元素进行判断,取出,删除的操作,
     42 如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。
     43 
     44 该接口只能通过List集合的listIterator方法获取。
     45 
     46 */
     47 
     48 
     49 import java.util.*;
     50 class ListDemo 
     51 {
     52     public static void sop(Object obj)
     53     {
     54         System.out.println(obj);
     55     }
     56     public static void method()
     57     {
     58         
     59         ArrayList al = new ArrayList();
     60 
     61         //添加元素
     62         al.add("java01");
     63         al.add("java02");
     64         al.add("java03");
     65         
     66         sop("原集合是:"+al);
     67         //在指定位置添加元素。
     68         al.add(1,"java09");
     69 
     70         //删除指定位置的元素。
     71         //al.remove(2);
     72 
     73         //修改元素。
     74         //al.set(2,"java007");
     75 
     76         //通过角标获取元素。
     77         sop("get(1):"+al.get(1));
     78 
     79         sop(al);
     80 
     81         //获取所有元素。
     82         for(int x=0; x<al.size(); x++)
     83         {
     84             System.out.println("al("+x+")="+al.get(x));
     85         }
     86 
     87         Iterator it = al.iterator();
     88 
     89         while(it.hasNext())
     90         {
     91             sop("next:"+it.next());
     92         }
     93 
     94 
     95         //通过indexOf获取对象的位置。
     96         sop("index="+al.indexOf("java02"));
     97 
     98         List sub = al.subList(1,3);
     99 
    100         sop("sub="+sub);
    101     }
    102 
    103     
    104     public static void main(String[] args) 
    105     {
    106 
    107         //演示列表迭代器。
    108         ArrayList al = new ArrayList();
    109 
    110         //添加元素
    111         al.add("java01");
    112         al.add("java02");
    113         al.add("java03");
    114 
    115         sop(al);
    116 
    117         
    118         ListIterator li = al.listIterator();
    119 
    120         
    121         //sop("hasPrevious():"+li.hasPrevious());
    122 
    123         while(li.hasNext())
    124         {
    125             Object obj = li.next();
    126 
    127             if(obj.equals("java02"))
    128                 //li.add("java009");
    129                 li.set("java006");
    130 
    131 
    132         }
    133 
    134         while(li.hasPrevious())
    135         {
    136             sop("pre::"+li.previous());
    137         }
    138         //sop("hasNext():"+li.hasNext());
    139         //sop("hasPrevious():"+li.hasPrevious());
    140 
    141 
    142         sop(al);
    143 
    144 
    145 
    146         /*
    147         //在迭代过程中,准备添加或者删除元素。
    148 
    149         Iterator it = al.iterator();
    150 
    151         while(it.hasNext())
    152         {
    153             Object obj = it.next();
    154 
    155             if(obj.equals("java02"))
    156                 //al.add("java008");
    157                 it.remove();//将java02的引用从集合中删除了。
    158 
    159             sop("obj="+obj);
    160 
    161 
    162         }
    163         sop(al);
    164         */
    165         
    166 
    167 
    168     }
    169 }
     1 import java.util.*;
     2 
     3 /*
     4 去除ArrayList集合中的重复元素。
     5 
     6 */
     7 
     8 class ArrayListTest 
     9 {
    10 
    11     public static void sop(Object obj)
    12     {
    13         System.out.println(obj);
    14     }
    15     public static void main(String[] args) 
    16     {
    17         ArrayList al = new ArrayList();
    18 
    19         al.add("java01");
    20         al.add("java02");
    21         al.add("java01");
    22         al.add("java02");
    23         al.add("java01");
    24 //        al.add("java03");
    25 
    26 
    27         /*
    28         在迭代时循环中next调用一次,就要hasNext判断一次。
    29         Iterator it = al.iterator();
    30 
    31         while(it.hasNext())
    32         {
    33             sop(it.next()+"...."+it.next());
    34         }
    35         */
    36 
    37         /**/
    38         sop(al);
    39         
    40         al = singleElement(al);
    41 
    42         sop(al);
    43         
    44 
    45     }
    46 
    47     public static ArrayList singleElement(ArrayList al)
    48     {
    49         //定义一个临时容器。
    50         ArrayList newAl = new ArrayList();
    51 
    52         Iterator it = al.iterator();
    53 
    54         while(it.hasNext())
    55         {
    56             Object obj = it.next();
    57 
    58             if(!newAl.contains(obj))
    59                 newAl.add(obj);
    60 
    61         }
    62 
    63         return newAl;
    64     }
    65 }
      1 import java.util.*;
      2 
      3 /*
      4 将自定义对象作为元素存到ArrayList集合中,并去除重复元素。
      5 
      6 比如:存人对象。同姓名同年龄,视为同一个人。为重复元素。
      7 
      8 
      9 思路:
     10 1,对人描述,将数据封装进人对象。
     11 2,定义容器,将人存入。
     12 3,取出。
     13 
     14 
     15 
     16 List集合判断元素是否相同,依据是元素的equals方法。
     17 
     18 
     19 
     20 */
     21 
     22 
     23 
     24 class Person
     25 {
     26     private String name;
     27     private int age;
     28     Person(String name,int age)
     29     {
     30         this.name = name;
     31         this.age = age;
     32     }
     33     
     34     public boolean equals(Object obj)
     35     {
     36 
     37         if(!(obj instanceof Person))
     38             return false;
     39 
     40         Person p = (Person)obj;
     41         //System.out.println(this.name+"....."+p.name);
     42 
     43         return this.name.equals(p.name) && this.age == p.age;
     44     }
     45     /**/
     46     public String getName()
     47     {
     48         return name;
     49     }
     50     public int getAge()
     51     {
     52         return age;
     53     }
     54 }
     55 class ArrayListTest2 
     56 {
     57     public static void sop(Object obj)
     58     {
     59         System.out.println(obj);
     60     }
     61     public static void main(String[] args) 
     62     {
     63         ArrayList al = new ArrayList();
     64 
     65         al.add(new Demo());
     66 
     67         al.add(new Person("lisi01",30));//al.add(Object obj);//Object obj = new Person("lisi01",30);
     68         //al.add(new Person("lisi02",32));
     69         al.add(new Person("lisi02",32));
     70         al.add(new Person("lisi04",35));
     71         al.add(new Person("lisi03",33));
     72         //al.add(new Person("lisi04",35));
     73 
     74         
     75         //al = singleElement(al);
     76 
     77         sop("remove 03 :"+al.remove(new Person("lisi03",33)));//remove方法底层也是依赖于元素的equals方法。
     78 
     79 
     80         Iterator it = al.iterator();
     81 
     82 
     83         while(it.hasNext())
     84         {
     85             Person p = (Person)it.next();
     86             sop(p.getName()+"::"+p.getAge());
     87         }
     88     }
     89 
     90 
     91     public static ArrayList singleElement(ArrayList al)
     92     {
     93         //定义一个临时容器。
     94         ArrayList newAl = new ArrayList();
     95 
     96         Iterator it = al.iterator();
     97 
     98         while(it.hasNext())
     99         {
    100             Object obj = it.next();
    101 
    102             if(!newAl.contains(obj))
    103                 newAl.add(obj);
    104 
    105         }
    106 
    107         return newAl;
    108     }
    109 }
      1 import java.util.*;
      2 
      3 /*
      4 Collection定义了集合框架的共性功能。
      5 1,添加
      6     add(e);
      7     addAll(collection);
      8 
      9 2,删除
     10     remove(e);
     11     removeAll(collection);
     12     clear();
     13 
     14 3,判断。
     15     contains(e);
     16     isEmpty();
     17 
     18 4,获取
     19     iterator();
     20     size();
     21 
     22 5,获取交集。
     23     retainAll();
     24 
     25 6,集合变数组。
     26     toArray();
     27 
     28 
     29 
     30 1,add方法的参数类型是Object。以便于接收任意类型对象。
     31 
     32 2,集合中存储的都是对象的引用(地址)
     33 
     34 
     35 什么是迭代器呢?
     36 其实就是集合的取出元素的方式。
     37 如同抓娃娃游戏机中的夹子。
     38 
     39 迭代器是取出方式,会直接访问集合中的元素。
     40 所以将迭代器通过内部类的形式来进行描述。
     41 通过容器的iterator()方法获取该内部类的对象。
     42 
     43 
     44 
     45 
     46 */
     47 class  CollectionDemo
     48 {
     49     public static void main(String[] args) 
     50     {
     51         
     52         method_get();
     53     }
     54     public static void method_get()
     55     {
     56         ArrayList al = new ArrayList();
     57 
     58         //1,添加元素。
     59         al.add("java01");//add(Object obj);
     60         al.add("java02");
     61         al.add("java03");
     62         al.add("java04");
     63 
     64         /*
     65         Iterator it = al.iterator();//获取迭代器,用于取出集合中的元素。
     66 
     67         while(it.hasNext())
     68         {
     69             sop(it.next());
     70         }
     71         */
     72 
     73         for(Iterator it = al.iterator(); it.hasNext() ; )
     74         {
     75             sop(it.next());
     76         }
     77     }
     78 
     79 
     80     public static void method_2()
     81     {
     82         ArrayList al1 = new ArrayList();
     83 
     84         al1.add("java01");
     85         al1.add("java02");
     86         al1.add("java03");
     87         al1.add("java04");
     88         ArrayList al2 = new ArrayList();
     89 
     90         al2.add("java03");
     91         al2.add("java04");
     92         al2.add("java05");
     93         al2.add("java06");
     94 
     95         
     96         //al1.retainAll(al2);//去交集,al1中只会保留和al2中相同的元素。
     97         al1.removeAll(al2);
     98 
     99         sop("al1:"+al1);
    100         sop("al2:"+al2);
    101 
    102 
    103 
    104 
    105     }
    106 
    107     public static void base_method()
    108     {
    109         //创建一个集合容器。使用Collection接口的子类。ArrayList
    110         ArrayList al = new ArrayList();
    111 
    112         //1,添加元素。
    113         al.add("java01");//add(Object obj);
    114         al.add("java02");
    115         al.add("java03");
    116         al.add("java04");
    117 
    118         //打印原集合。
    119         sop("原集合:"+al);
    120 
    121 
    122         //3,删除元素。
    123         //al.remove("java02");
    124         //al.clear();//清空集合。
    125 
    126 
    127         //4,判断元素。
    128         sop("java03是否存在:"+al.contains("java03"));
    129         sop("集合是否为空?"+al.isEmpty());
    130 
    131 
    132         //2,获取个数。集合长度。
    133         sop("size:"+al.size());
    134 
    135         //打印改变后的集合。
    136         sop(al);
    137 
    138     }
    139 
    140     public static void sop(Object obj)
    141     {
    142         System.out.println(obj);
    143     }
    144 }
     1 import java.util.*;
     2 /*
     3 |--Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。、
     4     |--HashSet:底层数据结构是哈希表。是线程不安全的。不同步。
     5             HashSet是如何保证元素唯一性的呢?
     6             是通过元素的两个方法,hashCode和equals来完成。
     7             如果元素的HashCode值相同,才会判断equals是否为true。
     8             如果元素的hashcode值不同,不会调用equals。
     9 
    10             注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。
    11 
    12 
    13     |--TreeSet:
    14 
    15 Set集合的功能和Collection是一致的。
    16 
    17 
    18 
    19 
    20 */
    21 
    22 
    23 class HashSetDemo 
    24 {
    25     public static void sop(Object obj)
    26     {
    27         System.out.println(obj);
    28     }
    29     public static void main(String[] args) 
    30     {
    31         
    32         HashSet hs = new HashSet();
    33 
    34         sop(hs.add("java01"));
    35         sop(hs.add("java01"));
    36         hs.add("java02");
    37         hs.add("java03");
    38         hs.add("java03");
    39         hs.add("java04");
    40 
    41         Iterator it = hs.iterator();
    42 
    43         while(it.hasNext())
    44         {
    45             sop(it.next());
    46         }
    47     }
    48 }
     1 import java.util.*;
     2 
     3 /*
     4 往hashSet集合中存入自定对象
     5 姓名和年龄相同为同一个人,重复元素。
     6 
     7 
     8 
     9 
    10 
    11 */
    12 class HashSetTest 
    13 {
    14     public static void sop(Object obj)
    15     {
    16         System.out.println(obj);
    17     }
    18     public static void main(String[] args) 
    19     {
    20         HashSet hs = new HashSet();
    21 
    22         hs.add(new Person("a1",11));
    23         hs.add(new Person("a2",12));
    24         hs.add(new Person("a3",13));
    25 //        hs.add(new Person("a2",12));
    26 //        hs.add(new Person("a4",14));
    27 
    28         //sop("a1:"+hs.contains(new Person("a2",12)));
    29             
    30 //        hs.remove(new Person("a4",13));
    31         
    32 
    33         Iterator it = hs.iterator();
    34 
    35         while(it.hasNext())
    36         {
    37             Person p = (Person)it.next();
    38             sop(p.getName()+"::"+p.getAge());
    39         }
    40     }
    41 }
    42 class Person
    43 {
    44     private String name;
    45     private int age;
    46     Person(String name,int age)
    47     {
    48         this.name = name;
    49         this.age = age;
    50     }
    51     
    52     public int hashCode()
    53     {
    54         System.out.println(this.name+"....hashCode");
    55         return name.hashCode()+age*37;
    56     }
    57 
    58     public boolean equals(Object obj)
    59     {
    60 
    61         if(!(obj instanceof Person))
    62             return false;
    63 
    64         Person p = (Person)obj;
    65         System.out.println(this.name+"...equals.."+p.name);
    66 
    67         return this.name.equals(p.name) && this.age == p.age;
    68     }
    69 
    70     
    71     public String getName()
    72     {
    73         return name;
    74     }
    75     public int getAge()
    76     {
    77         return age;
    78     }
    79 }
    80 
    81 /*
    82 
    83 
    84 */
     1 import java.util.*;
     2 
     3 /*
     4 LinkedList:特有方法:
     5 addFirst();
     6 addLast();
     7 
     8 getFirst();
     9 getLast();
    10 获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException
    11 
    12 removeFirst();
    13 removeLast();
    14 获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementException
    15 
    16 
    17 在JDK1.6出现了替代方法。
    18 
    19 offerFirst();
    20 offerLast();
    21 
    22 
    23 peekFirst();
    24 peekLast();
    25 获取元素,但不删除元素。如果集合中没有元素,会返回null。
    26 
    27 pollFirst();
    28 pollLast();
    29 获取元素,但是元素被删除。如果集合中没有元素,会返回null。
    30 
    31 
    32 
    33 
    34 */
    35 
    36 class LinkedListDemo 
    37 {
    38     public static void main(String[] args) 
    39     {
    40         LinkedList link = new LinkedList();
    41 
    42         link.addLast("java01");
    43         link.addLast("java02");
    44         link.addLast("java03");
    45         link.addLast("java04");
    46 
    47         //sop(link);
    48 //        sop(link.getFirst());
    49 //        sop(link.getFirst());
    50         //sop(link.getLast());
    51         //sop(link.removeFirst());
    52         //sop(link.removeFirst());
    53 
    54         //sop("size="+link.size());
    55 
    56         while(!link.isEmpty())
    57         {
    58             sop(link.removeLast());
    59         }
    60 
    61     }
    62 
    63     public static void sop(Object obj)
    64     {
    65         System.out.println(obj);
    66     }
    67 }
    68 /*
    69 
    70 ---
    71 java01
    72 java02
    73 java03
    74 java04
    75 
    76 ----
    77 java04
    78 java03
    79 java02
    80 java01
    81 ---
    82 */
    /*
    使用LinkedList模拟一个堆栈或者队列数据结构。
    
    堆栈:先进后出  如同一个杯子。
    队列:先进先出 First in First out  FIFO 如同一个水管。
    
    
    
    */
    
    import java.util.*;
    class DuiLie
    {
        private LinkedList link;
    
        DuiLie()
        {
            link = new LinkedList();
        }
        
        public void myAdd(Object obj)
        {
            link.addFirst(obj);
        }
        public Object myGet()
        {
            return link.removeFirst();
        }
        public boolean isNull()
        {
            return link.isEmpty();
        }
    
    }
    
    
    
    class  LinkedListTest
    {
        public static void main(String[] args) 
        {
            DuiLie dl = new DuiLie();
            dl.myAdd("java01");
            dl.myAdd("java02");
            dl.myAdd("java03");
            dl.myAdd("java04");
    
            while(!dl.isNull())
            {
                System.out.println(dl.myGet());
            }
        }
    }
  • 相关阅读:
    linux kgdb 补丁
    linux kdb 内核调试器
    linux 使用 gdb
    linux 系统挂起
    linux oops 消息
    linux strace 命令
    linux ioctl 方法
    linux seq_file 接口
    [数据结构] 迷宫问题(栈和队列,深搜和广搜)
    简化浏览器地址栏訪问路径
  • 原文地址:https://www.cnblogs.com/itcqx/p/5855517.html
Copyright © 2020-2023  润新知