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

JAVA基础之集合(下)

2015-07-23 15:27 393 查看
集合类:用于存储对象,数组类是用于存储基本类型。
特点:1.用于存储对象的容器。
2.集合的长度是可变的。
3.集合中不可以存储基本数据类型值。
集合框架:(重点)



Collection:(顶层接口)collection是接口,所以要创建对象必须依靠实现它的子类,一般是用ArrayList;
Collection方法:1、添加:
boolean add(Object obj);
boolean addAll(Collection coll);
2、删除:
boolean remove(Object obj);
boolean removeAll(Collection coll);
void clear();
3、判断:
booleancontains(Object obj);
boolean containsAll(Collection coll);
boolean isEmpty();判断集合中是否有元素。
4、获取:

int size();
Iterator iterator();
取出元素的方式:迭代器。
该对象必须依赖于具体容器,因为每一个容器的数据结构都不同,所以该迭代器对象是在容器中进行内部实现的,也就是iterator方法在每个容器中的实现方式是不同的。
对于使用容器者而言,具体的实现不重要,只要通过容器获取到该实现的迭代器的对象即可,也就是iterator方法。
Iterator接口就是对所有的Collection容器进行元素取出的公共接口。
5、其他:
boolean retainAll(Collection coll);取交集
Object toArray();将集合转成数组
//比较高效的遍历程序,外国人喜欢用
//for循环结束,Iterator变量内存释放,更高效
for(Iterator it2 =coll.iterator();it2.hasNext();){
System.out.println(it2.next());

List和Set:
List:有序(存入和取出的顺序一致),元素都有索引(角标),允许重复元素。可以完成增删改查,跟collection一样。它也是接口,一般也是用子类ArrayList。
//list特有的取出元素的方式之一
for(int x = 0; x < list.size(); x++){
System.out.println("get:" + list.get(x);}
易错点:在迭代器过程中,不要使用集合操作元素,容易出现异常:java.util.ConcurrentModificationException。
可以使用Iterator接口的子接口ListIterator来完成在迭代中对元素进行更多的操作。
只要将Iterator it=list.iterator();改成Iteratorit=list.ListIterator();就可以,它可以实现在迭代过程中完成对元素的增删改查。注意,只有List集合具备这个功能,其他集合不具备ListIterator。
List:有序;有角标;元素可以重复;
|--Vector:内部是数组数据结构,是同步的。增删,查询都很慢。
|--ArrayList:内部是数组数据结构,是不同步的,替代了Vector。替代了Vector,查询的速度快。
|--LinkedList:内部是链表数据结构,是不同步的。增删元素的速度很快。
|-JDK1.6之后的新方法:offerFirst,offerLast,getFirst,getLast,(get是获取但不移除),peekFirst,peekLast,(peek是获取并移除)removeFirst,removrLast(获取并移除)
Set:元素不能重复,无序。
|--HashSet:内部数据结构是哈希表,是不同步的。先判断哈希值,再用equals判断内容,实际中经常覆盖或改写equals中的比较内容;要想让无序变有序,使用LinkHashSet。
|--TreeSet:可以对Set集合中的元素进行排序,是不同步的,它的底层是二叉树结构,TreeSet对元素进行排序的方式有两种:
(1) 让元素自身具备比较功能,元素就需要实现Comparable接口,覆盖compareTo方法。
(2) 让集合自身具备比较功能,定义一个类实现Comparator接口,覆盖compare方法,将该类对象作为参数传递给TreeSet集合的构造函数。(当对象中不具备自然对象时用此方法)

Map:一次添加一对元素,Collection一次添加一个元素。Map也称为双列集合,Collection集合称为单列集合。map集合中必须保证键的唯一性。
常用方法:
1、添加
value put(key,value):返回前一个和key关联的值,如果没有返回null。
2、删除
void clear():清空map集合。
value remove(Object key):根据指定的key删除这个键值对。
3、判断
boolean containsKey(key);
boolean containsValue(value);
boolean isEmpty();
4、获取

value get(key):通过键获取值,如果没有该键返回null; 当然可以通过返回null,来判断是否包含指定键。
int size():获取键值对个数。
Map集合没有Iterator,但是可以将map集合转成collection集合,然后进行迭代打印输出;
获取Map集合元素并打印方式一:KeySet
//原理,通过keySet方法获取map中所有的键所在的set集合,在通过set的迭代器获取到每一个键。
//再对每一个键通过map集合的get方法获取其对应的值即可。
Set<Integer> keySet = map.keySet();
Iterator<Integer> it = keySet.iterator();
while(it.hasNext()){
Integer key = it.next();
String value = map.get(key);
System.out.println(key +":" + value);
}
获取Map集合元素并打印方式二:EntrySet
/*
通过Map转成Set就可以迭代。
找到了另一个方法,entrySet。
该方法将键和值的映射关系作为对象存储到了Set集合中,而这个映射关系的类型就是Map.Entry类型
*/
Set<Map.Entry<Integer,String>> entrySet = map.entrySet();
Iterator<Map.Entry<Integer,String>> it =entrySet.iterator();
while(it.hasNext()){
Map.Entry<Integer,String> me = it.next();
Integer key = me.getKey();
String value = me.getValue();
System. out.println(key
+":" + value);
}
}
获取Map集合元素并打印方式三:
public static voidmethod(Map<Integer,String> map){
map.put(8, "王五");
map.put(2, "赵六");
map.put(7, "小强");
map.put(6, "旺财");
Collection<String> values = map.values();
Iterator<String> it = values.iterator();
. while(it.hasNext()){
System.out.println(it.next());
}
}

Map常用的子类:

|--Hashtable:内部结构是哈希表,是同步的。不允许null作为键,null作为值。

|--Properties:用来存储键值对型的配置文件的信息,可以和IO技术相结合。

|--HashMap:内部结构式哈希表,不是同步的。允许null作为键,null作为值。

|--TreeMap:内部结构式二叉树,不是同步的。可以对Map结合中的键进行排序。

hashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: