您的位置:首页 > 编程语言 > Java开发

java基础-集合类总结

2017-12-07 22:58 183 查看
由于数组具有固定的长度,用来存放基本类型,java使用类库提供了一套完整的容器类来解决这个问题,基本的类型有:List,Set,Map和Queue,称为集合类。在java.util包中,用来存放对象的引用。

一.Collection接口

Collection接口通常不能直接使用,但接口提供了增删以及管理数据库的方法。List和Set是继承了Collection接口,所以方法是通用的。

常用的方法:

add(E e):添加指定的对象

remove(Object o):移除

isEmpty():判断是否为空

iterator():迭代器,用于遍历集合的对象

size():元素的个数

Iterator迭代器:

用于遍历集合类

Collection <String> list=new ArrayList<>();
list.add("a");
list.add("b");
Iterator <String> it =list.iterater();
while(it.hasNext()){
system.out.printLn((String)it.next());
}
//注意:it.next()方法返回的是Object()对象,要进行类型转换


1.List接口

List接口继承了Collection接口,包含了其所有方法可以通过索引(从0)来访问集合的元素

特点:可以重复,是有序的,元素的顺序就是插入的顺序

还有两个非常重要的方法:

get(int index):通过索引获取元素

set(int index,Object o):指定索引的对象修改成指定的对象

实现类有ArrayList和LinkedList:

List<E>list=new ArrayList<>();
Lsit<E>list2=new LinkedList<>();
//E表示泛型,可以是合法的java的数据类型。增加集合类的安全性
//除了Iterator 可以根据索引来遍历"
for(int i;i<list.size();i++){
system.out.print(list.get(i));
}


ArrayList:

实现了基于动态数组的数据结构,允许为null,可以根据索引对集合进行快速查询访问,但是增删效率比较低

LinkedList:

采用的是链表的结构保存对象的数据结构,增删效率较快,查询随机访问的效率较低

2.Set接口

Set接口继承了Collection接口,不按照特定的顺序排列,只是简单的把对象加入。但是不能包含重复的对象;set也包含了conllection接口的所有方法。

两种实现类:HashSet TreeSet

HashSet:实现了Set接口,由哈希表支持(实际上是一个HashMap的实例)。不保证Set的迭代顺序不变,允许为Null元素

TreeSet:实现了Set接口,还实现了java.util.SortedSet接口,因此在遍历的时候按照自然顺序递增排序,也可以按照指定的比较器对集合中对象排序

TreeSet增加的方法:

first()/last():返回第一个/最后一个元素

comparator():返回Set中元素进行排序的比较器,如果按照自然顺序,则返回null

headSet(E toElement):返回一个新的Set集合,包含toElement(不包含)之前的所有元素

**subSet(E fromElement,E toElement):**fromElement(不包含)与toElement(包含)之间的元素

tailSet(E fromElement):返回一个新的Set集合,包含fromElement(包含)之后的所有元素

二.Map集合

Map接口没有继承Collection接口,提供的是key到value的映射,键值对。允许value是null,没有个数限制。

key具有唯一性,每个可以只能映射一个value,key还决定了存储对象的位置。Map也支持泛型Map

1.常用的方法:

put(K key,V value):添加

containsKey(Object key):如果包含key,返回true

containsValue(Object Value):如果包含Value,返回true

get(Object key):如果存在Key则返回对应的value,否则返回null

keySet():返回集合中所有key对象形成的Set集合

values():返回集合中所有value对象形成的Collection集合

2.Map接口的实现类有:HashMap TreeMap

一般建议使用HashMap类来实现Map集合,因为HashMap类实现的Map集合增删的效率更高。HashMap是基于哈希表的Map接口的实现。通过哈希码对内部的映射关系进行快速的查找,若希望Map集合中的对象也存在一定的吮吸,则使用TreeMap来实现Map类。

HashMap

基于希哈表的Map接口的实现,允许使用null键和null值;不保证顺序不变

TreeMap

不仅实现了Map接口,还实现了java.util.SortedMap,因此集合中的元素具有一定的顺序,不允许为null值,增删的时候效率比HashMap的性能差。

可以通过HashMap类来创建一个Map,当需要顺序输出的时候,在创建一个TreeMap实例,实现把元素顺序的输出

3.Map的遍历方法:

import java.util.*;

public class Test{
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("1", "value1");
map.put("2", "value2");
map.put("3", "value3");

//第一种:普遍使用,二次取值
System.out.println("通过Map.keySet遍历key和value:");
for (String key : map.keySet()) {
System.out.println("key= "+ key + " and value= " + map.get(key));
}

//第二种
System.out.println("通过Map.entrySet使用iterator遍历key和value:");
Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> entry = it.next();
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}

//第三种:推荐,尤其是容量大时
System.out.println("通过Map.entrySet遍历key和value");
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}

//第四种
System.out.println("通过Map.values()遍历所有的value,但不能遍历key");
for (String v : map.values()) {
System.out.println("value= " + v);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 集合类