欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java集合框架

程序员文章站 2022-05-12 07:57:01
...
集合框架:
collection 框架在软件包 java.util中,接口Collection<E>是Collection 层次结构中的根接口。接口 Collection<E>的已知子接口有List,Set等,已知实现类有ArrayList,LinkedList,Stack,Vector等。

一、以下为常见的:

  1)、接口 List <E> 有序的Collection。
     常用的List实现类有:ArrayList,LinkedList,Stack,Vector
      ArrayList:数组序列:有序的,可重复的,长度可变的,有下标的,地址连续的

     LinkedList:链表,链式序列,有序的,可重复的,长度可变的,有下标的,地址任意的,地址是任意的,各个数据之间通过引用关联
       
     Vector :向量,可以实现可增长的对象数组

     Stack :栈,后进先出的对象堆栈, 最先放入的数据在栈的底部,最后放的数据在栈的顶部,每次取数据都只能取到栈顶的数据,是Vector的子类

2)、集合 Set   无重复的Collection。
    常用的Set实现类有: HashSet,TreeSet
     HashSet:无序的,不可重复的,长度可变的
      TreeSet:不重复的,根据内容的自然顺序进行排序

3)、映射 Map<k,v>
    常用的Set实现类有:HashMap,TreeMap
        HashMap:k是一个HashSet
        TreeMap:k是一个TreeSet
    所有的K不能重复,每个K都对应一个Value,如果在加入数据的时候,出现相同的Key,则替换掉原有的Value



二、一些区别以及分别的使用场景:

   1)、 ArrayList与LinkedList

    ArrayList:在ArrayList中插入数据或删除数据时,需要将其后的所有数据相应的后移或者是前移,这样需要花费较多时间,效率比较低;而且此实现不是线程同步的。然而它的地址是连续的,一旦数据存储好了,查找效率比较高。
    LinkedList:因为它的地址是任意的,若要随机的访问某个数据,则必须从链表的一端一个一个元素的去查找,所以适合进行插入和删除操作,但是查询效率比较低。
    所以当要随机访问元素时,使用ArrayList,当要添加或删除数据时,使用LinkedList。

   2)、ArrayList与Vector
  
    Vector和ArrayList一样,都是大小可变数组的实现
    但当Vector或ArrayList中的元素超过它的初始大小时,Vector的容量会翻倍,而ArrayList只增加50%的大小
    ArrayList不支持线程同步,而 Vector是同步的
    所以在多线程中,一般采用Vector

  3)、HashSet与TreesSet

    HashSet:它不保证 set 的迭代顺序,特别是它不保证该顺序恒久不变,其中元素是不可重复的,不支持线程同步。
    TreeSet:使用元素的自然顺序对元素进行排序,元素是不可重复的,不支持线程同步。


代码示例:
  
import java.util.*;

public class Set {
public static void main(String[] args) {
  HashSet<String> hs=new HashSet<String>();
    hs.add("B");
hs.add("A");
hs.add("D");
hs.add("C");
for (String h : hs) {
System.out.print(h+" ");
}
System.out.println(" ");
TreeSet<String> ts = new TreeSet<String>();

ts.add("B");
ts.add("A");
ts.add("D");
ts.add("C");
for (String t : ts) {
System.out.print(t+" ");
}

}
}

结果如下:
  D A B C 
  A B C D

  4)、HashMap与TreeMap

    Hash:此类不保证映射的顺序,特别是它不保证该顺序恒久不变。不支持线程同步 。
    TreeMap:该映射根据其键的自然顺序进行排序,不支持线程同步。

代码如下:
import java.util.*;


public class HashMapDemo {

public static void main(String[] args) {

//创建一个HashMap对象
          HashMap<String,Integer> map = new HashMap<String,Integer>();
//存放数据
map.put("b",  90);
map.put("a", 100);
map.put("d", 50);
map.put("c", 10);
//如果存放相同的K,则替换掉这个K对应的Value
//map.put("韩国", 10);
//取出数据
//1.取得所有的k
Set<String> set = map.keySet();
//2.迭代Set
Iterator<String> iter = set.iterator();
System.out.println("HashMap:");
while(iter.hasNext()){
//取得一个K
String key = iter.next();
//根据K获得Value
int value = map.get(key);
System.out.print(key+" "+value+"   ");
}


  TreeMap<String,Integer> tm=new TreeMap<String,Integer>();
    tm.put("b",  90);
tm.put("a", 100);
tm.put("d", 50);
tm.put("c", 10);
Set<String> set1 = tm.keySet();
//2.迭代Set
Iterator<String> iter1 = set1.iterator();
System.out.println("\nTreeMap:");
while(iter1.hasNext()){
//取得一个K
String key1 = iter1.next();
//根据K获得Value
int value1 = tm.get(key1);
System.out.print(key1+" "+value1+"   ");

}
}

}

结果如下:
HashMap:
d 50   b 90   c 10   a 100  
TreeMap:
a 100   b 90   c 10   d 50  
相关标签: Java 框架