黑马程序员技术交流社区

标题: JAVA集合的汇总 [打印本页]

作者: 淡定哥    时间: 2013-5-23 13:11
标题: JAVA集合的汇总
集合
collection:list,set
add添加的是Object类型的数据。
集合中存放的是数据的地址。
数据在集合中的取出是有共性的,所以就把取出方式定义在集合内部,这样取出方式就可以直接访问集合的内部元素,那么取出方式就被定义成了内部类。而每一个容器的数据结构不同,所以取出细节也不一样,由于判断和取出是有共性的,所以将这些共性抽取出来,从而就有了Iterator接口;抽取方法就是Iterator();
list
list集合判断元素是否相同,用的是equals方法
list:元素是有序的,元素可以重复,因为该集合体系有索引
list集合特有的方法:凡是可以操作角标的方法都是特有方法!
增:add(index,element)   addAll(index,Collection)
删:remove(index)
改:set(index,element)
查:get(index)   subList(from,to)   listIterator();
案例:引出listIterator();listIterator是iterator的子接口;
在迭代时,不能通过操作集合对象的方法操作集合中的元素。因为会发生并发操作异常(ConcurrentModificationException),所以迭代时只能通过迭代器进行对集合元素的操作,但是Iterator方法是有限的,只能对元素进行判断、取出、删除的操作,如果想要进行其他操作(例如:添加、修改),就需要使用其子接口listIterator。

listArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快,但是增删稍慢。线程不同步。增长为原来的一半,更节省资源。
Vector:底层的数据结构式数组结构。特点:查询和增删都很慢,线程同步的。增长为原来的一倍。
vector特有的方法:枚举

LinkedList:底层使用的是链表数据结构。查询速度非常慢,但是增删速度非常快
LinkedList特有的方法:
addFirst();addLast();添加元素
getFirst();getLast();获取元素,不删除元素
removeFirst();removeLast();获取元素并删除元素,如果集合中没有元素会出现没有这个元素异常(NoSouchElementException)
pollFirst();pollLast();
堆栈以及队列的模拟:
   
Set:元素无序(存入和取出的顺序不一定一致),元素不可以重复
set的功能和collection是一致的。
常见的子类:
HashSet:底层的数据结构是哈希表,线程是不同步的。
HashSet是通过元素的两个方法:hashCodeequals来保证元素唯一性的,如果两个元素的hashCode值一样则调用equals方法,如果hashCode值不一样,则不需要调用equals方法.
注意:要判断元素的存在和删除元素等操作,依赖于元素的hashCodeequals方法。
TreeSet:可以对set中的元素进行排序。底层数据结构是二叉树。
保证元素唯一性的依据是compareTo方法return 0
TreeSet排序的第一种方式:让元素自身具备比较性。
元素需要实现comparable接口,实现compareTo方法。
这种排序方式成为元素的自然排序方式,也就是默认排序。
第二种排序方式:当元素自身不具备比较性时,或者具备的比较性不是所需要的,这时就需要集合自身具备比较性,在集合初始化时,就有了比较方式。
当两种排列方式同时存在时,以比较器为主(定义一个类,实现comparator接口,覆盖compare方法)。

Map集合:该集合存储键值对。一对一对往里存,并且要保证键的唯一性。
添加:put(Kkey, V value)如果出现相同的键,后添加的会覆盖原来的值,并put方法会返回原来的值    putAll(Map<?extends K,? extends V> m)
删除:clear()    remove(Object key)
判断:containsKey(Objectkey)  containsValue(Object value)  isEmpty()
获取:get(Objectkey)   size()   values()
重点:entrySet()获取的是关系对象,然后转成值
keySet() map集合转成set集合通过迭代器取出。
Map:
hashMap :底层是哈希表数据结构。允许使用null键null值
hashTable :底层是哈希表数据结构。不允许使用null键null值
TreeMap:底层是二叉树数据结构。线程不同步。可以用于个map集合的键进行排序。
Set<K>  keySet()map中所有的键存入到Set集合。因为Set具备迭代器。所以可以通过迭代方式取出所有的键,根据get方法,获取每一个键对应的值。
//获取map集合中的键的Set集合,keySet()
Set<K>keySet=map.keySet();
//有了Set集合就可以获取迭代器
Iterator<K>it=keySet.iterator();
while(it.hasNext())
{
        Kkey=it.next();
       //有了键就可以通过map集合的get方法获取其对应的值
       K value=map.get(key);
       System.out.println("key="+key+",value="+value);
    }
Set(Map.Entry(k,v))  entrySet():获取的是Map.Entry关系对象,获取后,就可以通过Map.EntrygetKeygetValue方法获取关系中的键和值。其实Map.Entry也是一个接口,他是Map中的一个内部接口。
Set<Map.Entry<K,V>>entrySet=map.entrySet();
Iterator<Map.Entry<K,V>>it=entrySet.iterator();
while(it.hasNext())
{
        Map.Entry<K,V>me=it.next();//取出的是成对映射关系的对象
        key=me.getKey();
        Kvalue=me.getValue();
        System.out.println("key="+key+",value="+value);
}

作者: 淡定哥    时间: 2013-5-23 13:13
尹桥印 发表于 2013-5-23 13:11
我最喜欢汇总的帖子了

谢谢支持,其实这都是做的笔记!还有很多重点和难点,我还会继续汇总!方便大家学习。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2