java类集框架的使用

 

Collection集合:顶层接口

两大分支:List 接口、set接口

List接口:

1.ArrayList

实现类: 

ArrayList:内部是一个采用顺序式数组结构,查询速度快,增删速度慢 (动态数组)

 1 public class ArraylistDemo {
 2     public static void main(String[] args) {
 3         List arrayList = new ArrayList();
 4         System.out.println("长度:"+arrayList.size()+",是否为空"+arrayList.isEmpty());
 5         arrayList.add("list");//保存数据
 6         arrayList.add("list");//保存重复的数据
 7         arrayList.add("list2");
 8         arrayList.add("list3");
 9         for (Object o : arrayList) {
10             System.out.println(o);
11         }
12         System.out.println("长度:"+arrayList.size()+",是否为空"+arrayList.isEmpty());
13     }
14 }

 

 

LinkedList内部是一个链表接口,查询速度较慢,增删速度快(双向链表),它的每一个节点中保存是两个元素对象,一个它对应的下一个节点,以及另一个它对应的上一个节点,比ArrayList占用更多的内存空间。同时LinkedList比ArrayList多实现了一个Queue队列数据接口

 

 1 import java.util.Iterator;
 2 import java.util.LinkedList;
 3 import java.util.List;
 4 
 5 public class LinkedListDemo {
 6 
 7     public static void main(String[] args) {
 8         // 创建集合
 9         List list = new LinkedList();//只能使用左边类型定义的方法
10         LinkedList list2 = new  LinkedList();
11         //    添加元素
12         list2.addFirst("a1");
13         list2.addFirst("a2");
14         list2.addFirst("a3");
15         //获取(获取)
16         System.out.println(list2.getFirst());//a3
17         
18         //删除(删除元素,返回元素)
19         Object removeFirst1 = list2.removeFirst();
20         Object removeFirst2 = list2.removeFirst();
21         Object removeFirst3 = list2.removeFirst();
22         //NoSuchElementException没有元素异常
23         //Object removeFirst = list2.removeFirst();
24         
25         //删除所有
26         while(!list2.isEmpty()){//isEmpty方法,判断集合是否为空,如果有元素,返回false,反之则true
27             list2.removeLast();//a1 a2 a3 队列结构
28             list2.removeFirst();// a3  a2 a1堆栈结构
29         };
30         for (Iterator it= list2.iterator(); it.hasNext();) {
31             list.remove(it.next());
32         
33         }
34 //        for(int x=0;x<list2.size();x++){
35 //            list2.remove(x);
36 //        }
37     }
38 
39 }

 

Vector用synchronized关键字修饰,线程安全的集合

   

 1 import java.util.List;
 2 import java.util.Vector;
 3 
 4 /**
 5  * @author cxl
 6  */
 7 public class VectorDemo {
 8     public static void main(String[] args) {
 9         List<String> a = new Vector<String>();//实例化list集合
10         System.out.println("长度:"+a.size()+",是否为空"+a.isEmpty());
11         a.add("list");//保存数据
12         a.add("list");//保存重复的数据
13         a.add("list2");
14         a.add("list3");
15         for (Object o : a) {
16             System.out.println(o);
17         }
18         System.out.println("长度:"+a.size()+",是否为空"+a.isEmpty());
19     }
20 }

 

 

set接口:

  Hashset采用了哈希算法(一般称为散列、无序),内部存储元素是会先根据hashCode算出这个对象的哈希值,哈希值不同,直接存储元素,如果哈希值相同,则比较这个对象的内容(equals),

内容相同,则认为这是重复的元素,如果内容不同,则通过内部的拉链法存储元素

    

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class HashSetDemo {
    public static void main(String[] args) {
        //创建集合  没有下标,不允许重复元素,无序(存进去的顺序和取出来的顺序不一致)
        Set<String> set  =  new HashSet<String>();
        set.add("小一");
        set.add("大二");
        set.add("c3");
        set.add("D4");
        System.out.println(set);

    }
}

 

TreeSet:二叉树结构,动对存进去的元素做自然排序,对于自定义的对象需要实现Comparable接口,重写comparable方法,建议对象的大小的

默认排序是根据comparTo方法返回的int类型值决定,返回0,代表元素相同,返回负数,代表当前对象比传入的参对象小,返回正数,代表当前对象比传入参数对象大,注意:如果是自定义对象,最好是将所有的条件都同时比较一次,先比较主要条件,在比较次要条件

public class TreeSetDemo {
    public static void main(String[] args) {
        Set<String> set = new TreeSet<>();
        set.add("小一");
        set.add("大二");
        set.add("c3");
        set.add("D4");
        System.out.println(set);
    }
}
程序执行结果:[c3, D4, 小一, 大二]

 

 

Map接口:

 

 

 

 

 

 

 

集合与数据的区别:

  数组(Array):长度是固定的,数组存储的元素的类型是确定的

  集合(ArrayList):长度是变化的,有序并可以有重复值,存储都是对象

 

面试题:

1.集合框架有什么优点?

集合的长度是可以变的,数组的长度是固定的

2.java集合框架中包含了哪些接口和类?

                                     Collection
         List         Set                Map
ArrayList LinkedList
HashSet TreeSet
hashMap  treeMap

 

3.ArrayList与LinkedList有何异同?

1.数据结构不同

 

2.效率不同

查询多的时候使用ArrayList

操作多的时候使用Linkedlist

 

 

 

 

posted @ 2020-07-03 20:05  REEB00T  阅读(57)  评论(0)    收藏  举报