集合接口collection与Map接口

来源:互联网 发布:杀敌算法 下载 编辑:程序博客网 时间:2024/05/19 03:22

位于java.util包中

collection接口(不唯一、无序)

子接口

1.List接口  (存储一组不唯一、有序的对象)

实现类ArrayList(非同步的unsynchronized不是线程安全)
实现类LinkedList(非同步的unsynchronized不是线程安全)
实现类Vector(线程安全的,同步的synchronized):(子类)Stack


ArrayList 采用数组方式存储数据、利用索引直接获取元素,遍历元素和随机访问元素的效率比较高
ArrayList进行元素替换可使用set(int index,Object o)的方法;也可以通过移除remove(int index)或者remove(Object o),然后添加add(Obeject o)的方式


indexOf(Object o) 返回元素在集合中出现的索引
boolean add(Object o) 在列表的末尾顺序添加元素,起始索引位置从0 开始
void add(int index,Object o) 在指定的索引位置添加元素。索引位置必须介于0和列表中元素个数之间
int size() 返回列表中的元素个数
Object get(int index) 返回指定索引位置处的元素。取出的元素是Object 类型,使用前需要进行强制类型转换
boolean contains(Object o) 判断列表中是否存在指定元素
boolean remove(Object o) 从列表中删除元素
Object remove(int index) 从列表中删除指定位置元素,起始索引位置从0 开始

addAll是传入一个List,将此List中的所有元素加入到当前List中,也就是当前List会增加的元素个数为传入的List的大小

即addAll(Collection c)
   add(int index,Elelemt e)

--------------------------------------

addAll(Collection c)

此方法按照指定 collection 的迭代器所返回的元素顺序,将该 collection 中的所有元素添加到此列表的尾部。如果正在进行此操作时修改指定的 collection ,那么此操作的行为是不确定的。(这意味着如果指定的 collection 是此列表且此列表是非空的,那么此调用的行为是不确定的)。

C

包含要添加到此列表中的元素的 collection

return

如果此列表由于调用而发生更改,则返回 true

Throws

NullPointerException: 如果指定的 collection 为 null

addAll是传入一个List,将此List中的所有元素加入到当前List中,也就是当前List会增加的元素个数为传入的List的大小

即addAll(Collection c)
add(int index,Elelemt e)

--------------------------------------

addAll(Collection c)

此方法按照指定 collection 的迭代器所返回的元素顺序,将该 collection 中的所有元素添加到此列表的尾部。如果正在进行此操作时修改指定的 collection ,那么此操作的行为是不确定的。(这意味着如果指定的 collection 是此列表且此列表是非空的,那么此调用的行为是不确定的)。

C

包含要添加到此列表中的元素的 collection

return

如果此列表由于调用而发生更改,则返回 true

Throws

NullPointerException: 如果指定的 collection 为 null


List.addAll()方法,就是规定了,自己的这个List 就是容器,往里面增加的List 实例,增加到里面后,都会被看成对象。

    这时:List.add(list1),List.add(list2);List.add(list3),  这时,List.size 它的大小就是所有list 实例化后的总数和总的记录数。

   

    因此,当需要把多个List 实例放到一起的时候,必须使用List.addAll()方法。


Java中的ArrayList的初始容量和容量分配

一般情况下,使用的时候会像这样进行声明:
List arrayList = new ArrayList();
如果像上面这样使用默认的构造方法,初始容量被设置为10。当ArrayList中的元素超过10个以后,会重新分配内存空间,使数组的大小增长到16。
可以通过调试看到动态增长的数量变化:10->16->25->38->58->88->...

也可以使用下面的方式进行声明:
List arrayList = new ArrayList(4);
将ArrayList的默认容量设置为4。当ArrayList中的元素超过4个以后,会重新分配内存空间,使数组的大小增长到7。
可以通过调试看到动态增长的数量变化:4->7->11->17->26->...

那么容量变化的规则是什么呢?请看下面的公式:
((旧容量 * 3) / 2) + 1

一旦容量发生变化,就要带来额外的内存开销,和时间上的开销。
所以,在已经知道容量大小的情况下,推荐使用下面方式进行声明:
List arrayList = new ArrayList(CAPACITY_SIZE);
即指定默认容量大小的方式。


LinkedList 采用链表存储方式。插入、删除元素时效率比较高
void addFirst(Object o) 在列表的首部添加元素
void addLast(Object o) 在列表的末尾添加元素
Object getFirst() 返回列表中的第一个元素
Object getLast() 返回列表中的最后一个元素
Object removeFirst() 删除并返回列表中的第一个元素

Object removeLast() 删除并返回列表中的最后一个元素

 add(int index, E element):在此列表中指定的位置插入指定的元素。

       addAll(Collection<? extends E> c):添加指定 collection 中的所有元素到此列表的结尾,顺序是指定 collection 的迭代器返回这些元素的顺序。

       addAll(int index, Collection<? extends E> c):将指定 collection 中的所有元素从指定位置开始插入此列表。

       AddFirst(E e): 将指定元素插入此列表的开头。

       addLast(E e): 将指定元素添加到此列表的结尾。

clear(): 从此列表中移除所有元素。

       remove():获取并移除此列表的头(第一个元素)。

       remove(int index):移除此列表中指定位置处的元素。

       remove(Objec o):从此列表中移除首次出现的指定元素(如果存在)。

       removeFirst():移除并返回此列表的第一个元素。

       removeFirstOccurrence(Object o):从此列表中移除第一次出现的指定元素(从头部到尾部遍历列表时)。

       removeLast():移除并返回此列表的最后一个元素。

       removeLastOccurrence(Object o):从此列表中移除最后一次出现的指定元素(从头部到尾部遍历列表时)。


       对于查找方法的源码就没有什么好介绍了,无非就是迭代,比对,然后就是返回当前值。

       get(int index):返回此列表中指定位置处的元素。

       getFirst():返回此列表的第一个元素。

       getLast():返回此列表的最后一个元素。

       indexOf(Object o):返回此列表中首次出现的指定元素的索引,如果此列表中不包含该元素,则返回 -1。

       lastIndexOf(Object o):返回此列表中最后出现的指定元素的索引,如果此列表中不包含该元素,则返回 -1



2.Set接口  (存储一组唯一、无序的对象)

set不存在get()方法(无序的)

采用对象的equals()方法比较两个对象是否相等
实现类HashSet(不同步的,线程不安全的)
实现类TreeSet(不同步的,线程不安全的)
add(Object o) 若未包含指定元素,则添加指定元素
clear() 移除所有元素
size() 返回set中的元素的数量
isEmpty() 若set不包含任何元素则返回true
contains(Object o) 包含指定元素,则返回true
remove(Object o) 指定元素存在于set中,则将其移除

toArray()

addAll方法用来向Set集合添加另一个集合对象所包含的所有内容。

语法  boolean addAll(Collection<? extends E> c) 

返回值:如果Set集合发生更改,则返回true。

参数:c是要添加到Set集合中的另一个集合对象。

示例  本示例创建一个Set集合,为该集合添加一些对象,然后再创建第二个Set集合,同样添加一些对象,最后调用addAll方法将第二个Set集合添加到第一个Set集合中,并且分别输出调用addAll方法前后Set集合的大小。



Map接口(键值对<k,v>)

键值对形式保存数据 key(唯一、无序)-value(不唯一、无序)key要求唯一,无法修改 只能remove键值,不能remove value值

Hashtable:底层是哈希表数据结构,不可以存入null键null值,该集合是线程同步的。jdk1.0效率低

HashMap:底层是哈希表数据结构,允许使用null值和null键,该集合是不同步的。jdk1.2效率高

TreeMap:底层是二叉树数据结构。线程不同步,可以用于给map集合中的键进行排序。

hash表结构:Map<Object,Object> map的key里保存了value的内存地址相当于目录


isEmpty() 是否存在元素
clear() 清除集合中所有元素
Object  put(Object key, Object val)   以“键- 值”对的方式进行存储若包含则旧值将被替换  检查key是否存在,若存在则进行修改操作;反之进行插入操作
Object get(Object key)  根据键返回相关联的值,如果不存在指定的键,返回null
Object remove(Object key) 删除由指定的键映射的“键- 值对”
int size()  返回元素个数
Set keySet() 返回键的集合
Collection values() 返回值的集合
boolean containsKey(Object key)  如果存在由指定的键映射的“键-对”,返回true
containsvalue(Object value)          判断集合中是否存在value

Set entrySet() 键值对

0 0
原创粉丝点击