java.容器类(list,queue,map,set)

1.Collection

public interface Collection<E> extendsIterable<E> 

Set,Queue和List 都继承了Collection。Map没有。
Collection接口的方法:
    boolean add(Object o)   :向集合中加入一个对象的引用
    void clear()                        :删除集合中所有的对象,即不再持有这些对象的引用
    boolean isEmpty()           :判断集合是否为空
    boolean contains(Object o): 判断集合中是否持有特定对象的引用
    Iterartor iterator()        : 返回一个Iterator对象,可以用来遍历集合中的元素
    boolean remove(Object o)    :从集合中删除一个对象的引用
    int size()                               :返回集合中元素的数目

    Object[] toArray()                 :返回一个数组,该数组中包括集合中的所有元素

boolean java.util.Collection.addAll(Collection<? extends E> c)

求this与c的并集,然后保存在this对象中。若求交集过程中this对象的集合数据有变化,返回true。

boolean java.util.Collection.retainAll(Collection<?> c)
求this与c的交集,然后保存在this对象中。若求交集过程中this对象的集合数据有变化,返回true。

boolean java.util.Collection.removeAll(Collection<?> c)

求this与c的差集,this-c,然后保存在this对象中。若求交集过程中this对象的集合数据有变化,返回true。

Collection的toString()方法生成可读性很好的字符串,[e1,e2,...,en]

2.List

public interface List<E> extends
Collection<E> 

实现类:
ArrayList : 变长数组。相邻元素内存地址也相邻,可以对元素进行随机的访问,插入与删除元素的速度慢。

LinkedList: 链表数组。插入和删除速度快,访问速度慢。

常用方法:

<T> T[] java.util.List.toArray(T[] a)

这个方法很变态。List本身就是一个泛型接口,好好的<E>不用,非得转换成函数中的泛型T。此函数的行为依赖于实现类,以ArrayList为例,a长度与内部实现是相关的,见图1.

图1 ArrayList.toArray()函数实现

Object[] java.util.List.toArray()

返回的是Object。

E java.util.List.set(int index, E element)

将第i个元素替换成新元素。

void java.util.List.add(int index, E element)

将元素插入到第i个位置上。

int java.util.List.indexOf(Object o)

返回元素o第一次出现的位置。若没有,返回-1。

List<E> java.util.List.subList(int fromIndex, int toIndex)

返回子列表。

3.Queue

public interface Queue<E> extends
Collection<E> {}

boolean java.util.Queue.add(E e)
在队列尾部添加指定元素。
E java.util.Queue.element()
返回队列头部的元素,但并从队列中删除该元素,当队列为空时此方法会抛出异常

E java.util.Queue.peek()

返回队列头部的元素,但并从队列中删除该元素,当队列为空时此方法返回null,不抛异常。
E java.util.Queue.remove()
返回队列头部的元素,并从队列中删除该元素,当队列为空时此方法会抛出异常

E java.util.Queue.poll()

检索并删除元素,队列为空时返回null,不抛异常。

实现类:

LinkedList。

双端队列:public interface Deque<E> extends Queue<E>{}  详见:http://blog.csdn.net/chuchus/article/details/43307717

优先队列:public class PriorityQueue<E> extends AbstractQueue<E>  详见:http://blog.csdn.net/chuchus/article/details/43307485

4.Set

public interface Set<E> extends
Collection<E>{}

Set是最简单的一种集合。没有重复元素。不能按下标来取,只能通过iterator访问元素。

add(Object o)方法,若待添加的元素已在集合中,返回false。

实现类:

HashSet : 为快速查找设计的Set。存入HashSet的对象必须定义hashCode()。 

TreeSet : 保存自然次序的Set,底层为树结构。使用它可以从Set中提取有序的序列。

LinkedHashSet : 具有HashSet的查询速度,存入LinkedHashSet的对象必须定义hashCode()。内部使用链表维护元素的插入次序。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。

set详细内容移步:  http://blog.csdn.net/chuchus/article/details/41659509

5.Map

public interface Map<K,V> 

存放多组键值对。

V java.util.Map.put(K key, V value)
添加指定的键值对。若K 已存在,新的value会覆盖旧的。返回值为此key对应的旧的value,显然没有旧的对应关系时返回null。
V java.util.Map.get(Object key)
通过Key获得Value。若key不存在返回null。
Set<K> java.util.Map.keySet()
返回键的集合。
Collection<V> java.util.Map.values()
返回值的集合。
boolean java.util.Map.containsKey(Object key)
略。
boolean java.util.Map.containsValue(Object value)
略。
void java.util.Map.clear()
略。

boolean java.util.Map.remove(Object key, Object value)

删除已有的键值对。

toString()生成的结果格式形如: {a=1,b=2,...,z=26}

5.1实现类

java.util.TreeMap
红黑树实现。需要实现Comparable接口。最好同时重写equals()方法。TreeMap可以按照元素间从小到大的顺序遍历。

java.util.HashMap
基于哈希表实现。使用HashMap,需要同时重写hashCode()和equals()方法。比起其他Map的实现类,它的查找速度最快。

java.util.LinkedHashMap

它是HashMap的子类。LinkedHashMap可以按照元素的插入顺序遍历。详见:http://blog.csdn.net/chuchus/article/details/51986716

5.2 遍历

5.3 Map.Entry<K,V>

在Map接口内部还有一个接口: interface Entry<K,V> {...},用来存储键值对。

它的实现类也都是相应Map实现类的内部类,不方便直接用。可以尝试自己实现一个类:

6.Abstract

public abstract class AbstractList<E> extends AbstractCollection <E> implements List<E>

public abstract class AbstractQueue<E> extends AbstractCollection <E> implements Queue<E> {}

时间: 2024-09-11 14:46:42

java.容器类(list,queue,map,set)的相关文章

Java容器类的深入理解_java

Java容器类包含List.ArrayList.Vector及map.HashTable.HashMap ArrayList和HashMap是异步的,Vector和HashTable是同步的,所以Vector和HashTable是线程安全的,而ArrayList和HashMap并不是线程安全的.因为同步需要花费机器时间,所以Vector和HashTable的执行效率要低于ArrayList和HashMap.Collection├List       接口│├LinkedList       链表

java 文件输入输...-关于JAVA中文件的map写入操作

问题描述 关于JAVA中文件的map写入操作 想实现一个功能,首先有个map,不过只有一条数据.判断在指定路径是否有文件存在,如果没有则先创建再将map写入,如果指定路径有文件存在则直接写入或者,追加记录.谢谢了 解决方案 File.isFile方法可以判断文件是否存在: 写入的追加可以在申明输出流的时候加标志: 例如new FileOutputStream(File or filename, append) append为true表示追加写入: 如果要直接写入map,可以用序列化. 解决方案二

java集合框架07——Map架构与源码分析

前几节我们对Collection以及Collection中的List部分进行了分析,Collection中还有个Set,由于Set是基于Map实现的,所以这里我们先分析Map,后面章节再继续学习Set.首先我们看下Map架构图:         从图中可以看出:         1. Map是一个接口,Map中存储的内容是键值对(key-value).         2. 为了方便,我们抽象出AbstractMap类来让其他类继承,该类实现了Map中的大部分API,其他Map的具体实现就可以通

java List循环与Map循环的总结_java

java  List循环与Map循环的总结 做了一下list和map的总结,没有什么技术含量,就全当复习了一下api. 测试环境是在junit4下,如果没有自己写一个main方法也是一样的. 首先是List的三种循环: @Test public void ForListTest() { List<String> list = new ArrayList<String>(); list.add("1"); list.add("2"); list

两种特殊的Java容器类List和Set分析

容器类可以大大提高编程效率和编程能力,在Java2中,所有的容器都由SUN公司的Joshua Bloch进行了重新设计,丰富了容器类库的功能. Java2容器类类库的用途是"保存对象",它分为两类: Collection----一组独立的元素,通常这些元素都服从某种规则.List必须保持元素特定的顺序,而Set不能有重复元素. Map----一组成对的"键值对"对象,即其元素是成对的对象,最典型的应用就是数据字典,并且还有其它广泛的应用.另外,Map可以返回其所有键

J2SE综合:两种Java容器类List和Set分析

容器类可以大大提高编程效率和编程能力,在Java2中,所有的容器都由SUN公司的Joshua Bloch进行了重新设计,丰富了容器类库的功能. Java2容器类类库的用途是"保存对象",它分为两类: Collection----一组独立的元素,通常这些元素都服从某种规则.List必须保持元素特定的顺序,而Set不能有重复元素. Map----一组成对的"键值对"对象,即其元素是成对的对象,最典型的应用就是数据字典,并且还有其它广泛的应用.另外,Map可以返回其所有键

java容器类的继承结构

Java容器类库定义了两个不同概念的容器,Collection和Map Collection 一个独立元素的序列,这些元素都服从一条或多条规则.List必须按照插入的顺序保存元素.Set不能有重复元素.Queue按照排队规则来确定对象产生的顺序. (文中Jdk源码版本无特殊说明均为jdk1.8.0_101) public interface Collection<E> extends Iterable<E> { 可以看到,java定义了Collection接口和内部集合的基本操作方

Java小例子:根据Map对象的内容创建JavaBean

Java 提供 java.beans.Introspector 类,帮助我们分析 JavaBean 类当中 有哪些属性,通过它可以方便的对 JavaBean 对象属性进行取值和赋值操作.下 面是一个例子,根据 Map 对象中的内容创建 JavaBean 对象. 01.import java.beans.BeanInfo; 02.import java.beans.IntrospectionException; 03.import java.beans.Introspector; 04.impor

java中数组list map三者之间的互转介绍_java

三者之间转换关系,一张图清晰呈现.  上代码: 其中的maputils是apache的collection包. 复制代码 代码如下: package util; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.collections.MapUtil