集合 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。
list:ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快,但是增删稍慢。线程不同步。增长为原来的一半,更节省资源。 Vector:底层的数据结构式数组结构。特点:查询和增删都很慢,线程同步的。增长为原来的一倍。 vector特有的方法:枚举
LinkedList:底层使用的是链表数据结构。查询速度非常慢,但是增删速度非常快 LinkedList特有的方法: addFirst();addLast();添加元素 getFirst();getLast();获取元素,不删除元素 removeFirst();removeLast();获取元素并删除元素,如果集合中没有元素会出现没有这个元素异常(NoSouchElementException) 用pollFirst();pollLast(); 堆栈以及队列的模拟: Set:元素无序(存入和取出的顺序不一定一致),元素不可以重复 set的功能和collection是一致的。 常见的子类: HashSet:底层的数据结构是哈希表,线程是不同步的。 HashSet是通过元素的两个方法:hashCode和equals来保证元素唯一性的,如果两个元素的hashCode值一样则调用equals方法,如果hashCode值不一样,则不需要调用equals方法. 注意:要判断元素的存在和删除元素等操作,依赖于元素的hashCode和equals方法。 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.Entry中getKey和getValue方法获取关系中的键和值。其实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); } |