集合相关知识

来源:互联网 发布:red hat linux 6.8安装 编辑:程序博客网 时间:2024/06/05 17:12

一、数组Array和集合的区别:

 
(1)数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型)
 
(2)JAVA集合可以存储和操作数目不固定的一组数据。 (3)若程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,array不适用。
 
联系:使用相应的toArray()和Arrays.asList()方法可以回想转换。
 
二、collection相关函数 booleanadd(E e) 
          确保此 collection 包含指定的元素(可选操作)。 booleanaddAll(Collection<? extends E> c) 
          将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。 voidclear() 
          移除此 collection 中的所有元素(可选操作)。 booleancontains(Object o) 
          如果此 collection 包含指定的元素,则返回 true booleancontainsAll(Collection<?> c) 
          如果此 collection 包含指定 collection 中的所有元素,则返回 true booleanequals(Object o) 
          比较此 collection 与指定对象是否相等。 inthashCode() 
          返回此 collection 的哈希码值。 booleanisEmpty() 
          如果此 collection 不包含元素,则返回 true Iterator<E>iterator() 
          返回在此 collection 的元素上进行迭代的迭代器。 booleanremove(Object o) 
          从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。 booleanremoveAll(Collection<?> c) 
          移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。 booleanretainAll(Collection<?> c) 
          仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。 intsize() 
          返回此 collection 中的元素数。 Object[]toArray() 
          返回包含此 collection 中所有元素的数组。<T> T[]toArray(T[] a) 
          返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。
 
三、List、Set、Map是这个集合体系中最主要的三个接口。 List和Set继承自Collection接口。 Map也属于集合系统,但和Collection接口不同。
 
Set不允许元素重复。HashSet和TreeSet是两个主要的实现类。Set 只能通过游标来取值,并且值是不能重复的。
 
List有序且允许元素重复。ArrayList、LinkedList和Vector是三个主要的实现类。 ArrayList 是线程不安全的, Vector 是线程安全的,这两个类底层都是由数组实现的 LinkedList 是线程不安全的,底层是由链表实现的
 
Map 是键值对集合。其中key列就是一个集合,key不能重复,但是value可以重复。 HashMap、TreeMap和Hashtable是Map的三个主要的实现类。 HashTable 是线程安全的,不能存储 null 值 HashMap 不是线程安全的,可以存储 null 
 
                                                 通用的目的实现
 
接口     实现  哈希表   可变数组   树       链表    哈希表+链表SetHashSet TreeSet LinkedHashSetList ArrayList LinkedList MapHashMap TreeMap LinkedHashMap四.List和ArrayList  Map与HashMap的区别
 
  1.List是接口,List特性就是有序,会确保以一定的顺序保存元素.
 
  ArrayList是它的实现类,是一个用数组实现的List.
 
  Map是接口,Map特性就是根据一个对象查找对象.
 
  HashMap是它的实现类,HashMap用hash表实现的Map,就是利用对象的hashcode(hashcode()是Object的方法)进行快速散列查找.(关于散列查找,可以参看<<数据结构>>)
 
  2.一般情况下,如果没有必要,推荐代码只同List,Map接口打交道.
 
  比如:List list = new ArrayList();
 
  这样做的原因是list就相当于是一个泛型的实现,如果想改变list的类型,只需要:
 
  List list = new LinkedList();//LinkedList也是List的实现类,也是ArrayList的兄弟类
 
  这样,就不需要修改其它代码,这就是接口编程的优雅之处.
 
  另外的例子就是,在类的方法中,如下声明:
 
  private void doMyAction(List list){}
 
  这样这个方法能处理所有实现了List接口的类,一定程度上实现了泛型函数.
 
  3.如果开发的时候觉得ArrayList,HashMap的性能不能满足你的需要,可以通过实现List,Map(或者Collection)来定制你的自定义类.
 
五、List和Set的区别
1、List中元素有序可重复,Set中元素无需不可重复,重复添加只会保存第一次添加的元素。
2、List中常用方法中有set(int index,E element),set(int index)和get(int index) ,get(int index,E element)方法能灵活添加获取元素,而Set中没有这些方法(无序)。而且其中的Remove方法各不相同List中Remove(int index) ,Set中Remove(Object element)
3.List有三种遍历方式 (1)foreach遍历 (2)Iterator迭代器遍历 (3)通过size()和get()两种方法配合的一般遍历
复制代码
import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class javaTest2 implements javaTest1 {public static void main(String[] args) {    List list=new ArrayList();    list.add(1);    list.add(5);    list.add('a');        for (Object object : list) {        System.out.print(object+"  ");    }    System.out.println();        for (int i = 0; i < list.size(); i++) {        System.out.print(list.get(i)+"  ");    }    System.out.println();        Iterator it=list.iterator();    while(it.hasNext()){        System.out.print(it.next()+"  ");    }  }}
复制代码

运行结果:

1  5  a  1  5  a  1  5  a  

Set只有两种遍历方式 (1)foreach遍历 (2)Iterator迭代器遍历 

复制代码
Set set=new HashSet();    set.add(1);    set.add(3);    set.add('b');        for (Object object : set) {        System.out.print(object+" ");    }    System.out.println();        Iterator its=set.iterator();    while(its.hasNext()){        System.out.print(its.next()+" ");    }
复制代码

运行结果:

1 b 3 1 b 3 

六、集合具体实现化类的区别

1、Set实现:HashSet、TreeSet和LinkedSet区别

HashSet将其元素储存在一个哈希表中,它具有最好的性能实现,然而它不保证迭代的顺序;TreeSet将其元素存储在一个红黑树追踪,按元素的值顺序排列,它本质上比HashSet要慢;LinkedHashSet是作为哈希表实现的,用链表链接这些元素,按元素的插入顺序排列

2、List实现 ArrayList和LinkedList

一般大家都知道ArrayList和LinkedList的大致区别:
(1).ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
(2).对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
(3).对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

3、Map实现: HashMap、TreeMap和LinkedMap区别

他们的行为和执行性能和Set中的实现HashSet、TreeSet和LinkedSet类似。另外Hashtable(哈希表)重新实现了Map

 

0 0