Java 集合 List、Set、Map的特性、区别、用法

来源:互联网 发布:nero刻录软件序列号 编辑:程序博客网 时间:2024/05/30 20:07

集合框架:也就是集合体系   集合里面存储的都是对象的地址(引用)

集合框架的顶层定义的是该体系的共性基本功能

数组和集合的区别:

数组时固定长度   集合是可变长度

数组中只能存储同一类型的数据和对象

集合可以存储任意类型的对象

数组可以存储基本数据类型数据  集合只能存储对象。

Collection

   |---List该集合的元素有序(存储的顺心和取出的顺心是一致的)

              该集合中的元素都有索引,该集合中的元素可以重复

   |---Set:该集合是无序的,里面的元素是不可以重复的。



List :有序 

存储的内容有索引、可重复

List集合,判断元素是否相同,依据是equals方法。contains方法和remove方法都依据是equals方法来判断元素是否相同。


|----ArrayList:底层数据结构是数组结构.是线程不同步的(不安全的)

不同步、查询速度很快,但增删很慢


|----LinkedList:底层数据结构式链表结构。对元素的增删速度很快。但是查询速度很慢  

线程是不同步的


|----Vector:底层数据结构也是数组结构。是线程同步的(安全的) 

线程同步,效率低,被ArrayList替代了



Set :

存储的元素无序,不可以重复。

Set集合中的方法和Collection是一致的,他的取出方式只有一种,迭代器


|----HashSet:底层数据结构是哈希表,该集合是线程不同步的。

             HashSet集合是如何保证元素唯一性的呢?

通过元素的hashCode方法和equals方法来完成的唯一性的判断

如果hashCode值相同,在继续判断元素的equals方法是否为真

如果hashCode值不相同,就不会判断equals方法

HashSetcontainsremove依据都是hashCode方法,如果该方法返回值相同,才判断equals方法

|----TreeSet:它可以给Set集合中的元素进行指定方式的排序。

             保证元素唯一性的方式:通过比较的结果是否为0.

底层数据结构是二叉树

排序的第一种方式:让元素具备比较性,只要让元素实现Comparable接口,覆盖compareTo方法即可

但是,如果元素自身不具备比较性,或者元素自身具备的比较性不是所需要的,比如学生的自然排序是按照年龄排序,现在想要按照学生的姓名排序,还不可以改变原有代码,这是怎么办呢

排序的第二种方式:这时可以让集合自身具备比较性。可以定义一个类实现Comparator接口,覆盖compare方法将该Comparator接口子类对象作为参数传递给TreeSet集合构造函数,该对象就是比较器。


迭代器:所有collection集合共性的取出方式.

在使用时,通过两个方法来完成:

1, 判断容器中是否有元素----hasNext

2, 取出元素-----next


:

ArrayList al = new ArrayList();al.add("hh");al.add("aa");for(Iterator it =al.iterator();it..hasNext();){String s =(String)it.next();System.out.println(s);}


Map:一次存一对。一个是键,一个是值。键与值之间有对应关系,必须保证键的唯一性。

|--HashMap:底层是哈希表,线程是不同步的,允许使用 null 值和 null 键。

|--Hashtable底层是哈希表,线程是同步的,被HashMap替代。不允许null键,null值。

|--TreeMap:底层是二叉树数据结构,线程是不同步的。可以被Map集合中的键进行排序。

Map集合取出元素的原理就是:将map集合转成Set集合,在通过迭代器。

keySet():map中的键取出存储到Set集合中,在通过迭代器,在迭代过程中,

再通过map集合的get(key)方法获取键对应的值。

Map:存储键值对,保证键的唯一性。

Map常见的功能:

1, 添加元素:

value put(key,value):存储键值,返回键上一次关联的值,如果没有为null

putAll(map):存储一堆键值。

2, 删除元素:

value remove(key);

clear();

3, 判断元素:

containsKey(key);

containsValue(value):

isEmpty();

4获取元素:

value get(key): 通过键获取值。如果获取的值为null,可以用来判断该键否是存在。

Set<key> keySet(): 获取map值所有的键,并将键存入Set结合。在通过迭代器取出的同时,通过mapget方法获取键对应的值。

Set<Map.Entry<key,value>> entrySet(): map中的键值关系取出,封装成的Map.Entry对象。将Map.Entry对象存入到Set集合中。通过迭代器取出时,可以使用Map.Entry对象的getKey(),getValue()方法获取键和值。

Collection<Value> values(): 获取map中的所有值。并存储Collection集合。


MapCollection的区别:

Map是双列集合,Collection是单列集合。

Map存储元素是一对,键值对。Collection是一个。

Map存储元素使用put方法。Collection使用add方法。

Map取出所有元素,是将Map转成Set,在迭代。Collection直接使用迭代器。

什么时候使用Map集合呢?

当分析时对象间出现映射关系时,要首先想到map集合。

原创粉丝点击