Java集合框架
Posted AntarcticPenguin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java集合框架相关的知识,希望对你有一定的参考价值。
挺多的,整理用了很长时间,外加理解。
1、集合概述
- 这些接口和类大致分为3层
- 第一层是接口,包括:Conllection接口、List接口、Set接口和Map接口。
- 第二层是抽象类,AbstractConllection、AbstractList、AbstractSet、AbstractMap。方便第3层的使用
- 第三层是实际要使用的类
2、Collection接口
- 最顶层的接口就是Collection
- (1)第一类方法,向集合中添加对象
public boolean add(Object o),添加一个元素
public boolean addAll(Collection c),添加多个
- (2)第二类方法,从集合中删除元素的
public boolean remove(Object o),删除指定元素
public boolean addAll(Collection c),删除多个
public void clear(),删除所有
public boolean retainAll(Collection c),只保留部分
- (3)第三类方法,判断集合中元素的方法
public boolean isEmpty,判断集合是否为空
public boolean contains(Object o),判断是否包含
public boolean containsAll(Collection c),包含多个
public int size(),集合中元素的个数
- (4)第四类方法,进行转换的方法:
public Iterator iterator(),转换成迭代器
publicObject[] toArray(),转换成集合
- (5)第五类方法,通用的方法
public boolean equals(Object o),判断是否与另外的一个对象相同
publicinthashCode(),放回集合的哈希码。
public void clear(),删除所有
public boolean retainAll(Collection c),只保留部分
这里没有提供修改的元素,因为在集合里面没有顺序,没有办法定位要修改哪一个
3、Set接口
- Set接口表示集合,元素不重复,与Collection接口基本一致,方法与Collection完全相同
- SortedSet继承了Set接口,元素按升序排列(大小的有序)。
- (1)第一类方法,得到相关的Comparator对象
public Comparator comparator(),返回comparator对象
- (2)第二类方法,获取子集的方法:
public SortedSort subSet(Object fromElement,Object toElement),
public SortedSet headSet(Object toElement)
public Sortedert tailSet(Object fromElement)
- (3)第三类方法,获取元素的方法:
public Object first()和 public Object last()
4、List接口
- List接口继承Collection接口,元素是有序的(先后位置的有序),所以多了一些与顺序相关的方法
- (1)第一种方法,在指定的位置上添加元素
publicvoid add(int index,Object o)
public boolean addAll(int index,Collection c)
- (2)第二种方法,删除指定位置的元素:
public Object remove(int index)
- (3)第三种方法,获取部分元素:
public Object get(int index)
public List subList(int fromIndex,int toindex)
- (4)第四种方法,查找元素
public int indexOf(Object o)
public int lastIndexOf(Object o)
- (5)第五种方法,修改元素的方法:
public Object set(int index,Object o)
- (6)第六种方法,转换成有顺序的迭代器:
public Listlterator listlterator()
public Listlterator listlterator(int index)
List与Set相比,主要是增加了元素之间的顺序关系,并且允许元素重复。
5、Map接口
- 它的每个元素包括两个部分:键(key)和值(Value)。同一个Map对象中不允许使用相同的键,但是允许使用相同的值。所以Map接口隐含的有3个集合:键的集合、值的集合和映射的集合。
- (1)第一类方法,添加元素的方法:
public Object put(Object key,Object value),添加一个
public void putAll(Map m),添加多个元素
- (2)第二类方法,获取元素的方法:
public Object get(Object key)
- (3)第三类方法,删除元素的方法:
public Object remove(Object key)
- (4)第四类方法,键集合、值集合和映射集合
public Set entrySet(),获取映射的集合
public Collection values(),获取值的集合
public Set keySet(),返回所有键名的集合
- (5)第五类方法,是否存在指定的Key和Value
public boolean containsValue(Object value)
public boolean containsKey(Object key)
- Map中的元素是无序的,SortedMap接口有序
6、Iterator接口和Enumeration接口
- Iterator接口和Enumeration接口的作用类似,在Java1.2中使用了Iterator代替了Enumeration
- Enumeration的方法
boolean hasMoreElements()
E nextElement()
- Iterator接口的方法
hasNext(),判断是否有下一个元素
next()方法用于得到下一个元素
remove用于删除元素
7、HashSet类
- 元素无序,值可以是null,主要方法:
- (1)构造方法
public HashSet();
public HashSet(Collection<?extends E>c);
public HashSet(int initialCapacity);
public HashSet(int initialCapacity,float loadFactor);
- (2)添加元素的方法
public boolean add(Object o),添加指定的元素
public boolean addAll(Collection c),添加多个
例如:set3.add("元素5");
- (3)删除元素的方法
public boolean remove(Object o),删除一个
public boolean removeAll(Collection c);删除多个
public void clear(),删除所有元素
public boolean retainAll(Collection c),保留部分
例如:set1.remove("元素3")
- (4)查找元素的方法
public boolean contains(Object o), 是否存在
- (5)判断集合是否为空
public boolean isEmpty
- (6)遍历集合的方法
public Iterator iterator(),转换成迭代器
public Object[] toArray(), 转换成集合
使用HashSet
8、TreeSet类
- TreeSet能够对加入的元素进行排序
- 构造方法:
public TreeSet(), 创建爱你一个空的集合,自然顺序
public TreeSet(Collection<? extends E> c)
public TreeSet(Collection<? super E> comparator)
public TreeSet(SortedSet<E> s)
- TreeSet的多数方法与HashSet方法相同
9、ArrayList类
- ArrayList是以数组方式实现的链表,是非同步的,构造方法有3种:
- ArrayList(),构造一个初始化为10的空的链表
- ArrayList(Collection<? extends E> c),使用1个已经存在的集合构造一个链表
- ArrayList(int initialCapacity),指定初始化空间
- 练习一下构造ArrayList对象
- (1)向集合中添加对象的方法。
- public void add(int index,Object o)
- public boolean addAll(int index,Collection c)
- public boolean add(Object o)
- public boolean addAll(Collection c)
- 例如:list1.add("user3");
- (2)删除元素
- public boolean remove(int index,Object o),删除指定元素
- public boolean removeAll(Collection c),删除多个
- public void clear(),删除所有
- public boolean retainAll(Collection c),
- public Object remove(int index)
- (3)获取某个元素或者获取某些元素
- public Object get(int index)
- public List subList(int fromIndex,int toIndex)
- (4)查找某个元素
- public int indexOf(Object o)
- public int lastIndexOf(Object o)
- public boolean isEmpty()
- public boolean contains(Object o)
- public boolean containsAll(Collection c)
- public int size()
- (5)修改元素的方法
- public Object set(int index,Object o)
- (6)转换成其他对象
- public ListIterator listIterator()
- public ListIterator listIterator(int index)
- public Iterator iterator()
- public Object[] toArray()
- (7)ArrayList的遍历
方法一:
for(int i = 0;i<list1.size();i++){
System.out.println(lixt1.get(i));
}
方法二:
Object o[] = list1.toArray();
for(int i = 0;i<o.length;i++){
String temp = (String)o[i];
System.out.println(temp);
}
方法三:
Iterator<String> i = list1.iterator();
while(i.hasNext()){
String temp = i.next();
System.out.println(temp);
}
10、LinkedList类
- LinkedList类的用法与ArrayList类似。ArrayList是采用数组方式实现的List,而LinkedList是采用链表方式实现List,前者采用连续存储空间,后者采用非连续存储空间。如果集合元素在生成后变化不大,使用ArrayList,如果数据经常发生变化,应该使用LinkedList。
11、Vector类
- Vector类的用法与ArrayList非常类似。会随着元素的变化调整自身的容量。提供了4种与ArrayList类似的构造函数。
- Vector也实现了List接口,和ArrayList的功能基本类似,采用数组来实现。不同的是Vector支持同步,在非多线程环境下面使用ArrayList。
12、Hashtable类
- 实现了Map接口,是同步的哈希表,不允许类型为null的键和值。用于存储映射关系。
- Hashtable中的常用方法都是继承自Map接口。
13、HashMap类
- HashMap是基于Hash表的Map接口的实现,允许mull值和null键。与HashMap用法相同,只是HashMap不支持同步。HashMap不能保证元素的顺序。方法参见Map接口。
- 第一种遍历方式:
Object[] o = map.entrySet().toArray();
Map.Entry x;
for(int i = 0;i<map.size();i++){
x = (Map.Entry)o[i];
Object key = x.getKey();
Object value = x.getValue();
}
- 第二种遍历方式:
Object[] o = map.entrySet().toArray();
for(int i = 0;i<map.size();i++){
Object value = map.get(o[i]);
}
14、TreeMap类
- TreeMap是按照树的方式组织数据,查询的速度比较快,在添加数据的时候会对数据进行排序,根据key的自然顺序排序,用法和HashMap类似。
15、Properties类
- Properties类表示一组属性,Properties对象的属性信息可以写入到输出流,也可以从输入流加载。Properties中的key和value都是字符串。添加属性信息的时候应该使用setProperties方法
- 主要方法如下:
- public Enumeration<?>prooertyNames()
- public synchronized void load(InputStream inStream) throws IOException
- public synchronized Object setprooerty(String key,String value)
- public void list(PrintStream out)
- public void store(OutputStream out,String comments) throws IOException
- public void store(Writer writer,String comments) throws IOException
- Properties可以通过load和store方法从文件中加载属性或者把属性写入到文件中,属性文件的格式为:属性名=属性值
16、Comparable接口
- 如果某个类型实现Comparable接口,就可以通过sort方法对数组排序了
- Comparable接口定义了compareTo方法,参数另外一个要比较的对象
- Comparable接口的使用
17、Comparator接口
- Comparator接口表示比较器,例如要对教师对象进行排序,可以根据年龄排序,可以根据部门排序,可以根据入职时间排序,每一种排序方法都可以实现为一个比较器
- 实现Comparator接口,需要实现compare方法,方法有两个参数,分别表示要比较的两个对象,方法的返回值是int
- 例子:采用多种方式对学生进行排序
以上是关于Java集合框架的主要内容,如果未能解决你的问题,请参考以下文章