java基础(集合)

集合

1.集合分类

         Collection:单列集合(每次存一个对象)

                   List:有存储顺序, 可重复

                            ArrayList:数组实现, 查找快, 增删慢

                            LinkedList:链表实现, 增删快, 查找慢

                            Vector:和ArrayList原理相同, 线程安全, 效率低

                   Set:无存储顺序, 不重复

                            HashSet:使用哈希算法, 只去重复, 效率高

                            TreeSet:可以指定排序算法, 用二叉树形式存储

                            LinkedHashSet:HashSet的子类, 实现原理相同, 但可以保留存储顺序

         Map:键值对, 键唯一, 可以通过键查找值

                   HashMap:使用哈希算法对Key对象去重复, 效率高

                   TreeMap:可以指定排序算法, 用二叉树形式对Key对象进行存储        

                   LinkedHashMap:HashMap的子类, 原理相同, 可以保留存储顺序

                   Hashtable:实现原理和HashMap相同, 线程安全, 效率低, 不允许空键和空值

2.List

         2.1. List一种容器, 可以保存任意类型的对象, 长度可变.

         2.2.常用的List

                   ArrayList:数组实现, 查找快

                   LinkedList:链表实现, 增删快

                   Vector:和ArrayList原理相同, 线程安全, 效率低

         2.3.List中常用方法

                   add(Object)在List末尾添加一个元素

                   add(int,Object)在指定位置添加一个元素, 后面的元素全部向后移动

                   remove(int)删除指定位置上的元素

                   remove(Object)删除指定元素

                   set(int,Object) 将指定位置上的元素替换

                   get(int)获取指定位置上的元素

                   size()获取长度

                   iterator()获取迭代器

         2.4.List的迭代

                   普通for循环, 由于List是有序的, 所以可以使用get(int)逐个获取, 定义循环即可遍历

                   Iterator迭代器(Iterator iter=list.iterator()),使用Iterator的hasNext()方法可以判断是否包含下一个元素, 使用next()方法可以获取下一个元素

                   增强for循环, 使用"for(元素类型 变量名 : 容器){ 循环体 }"形式进行遍历, 每次循环时变量会引用容器中的一个元素

                   Enumeration,Vector特有的方法( Enumeratione=v.elements()), 使用elements()获得Enumeration, hasMoreElements()方法判断是否包含下一个, nextElement()方法获取下一个

3 Set

a)  无序并且不重复

b)  HashSet去重复:set集合由于是无序的,所以没有任何索引相关方法

c)  遍历迭代:Iterator<String>iter = set.iterator();

e)  HashSet内部用的是哈希算法去重复,当存储对象的时候,先调用对象的hashCode方法计算一个哈希值,然后在集合中查找是否有哈希值相同的对象,如果没有哈希值相同的对象,那么直接存入,如果有哈希值相同的对象调用equals()方法比较,比较结果为true就不存,比较结果为false就存入

f)  当我们想HashSet中存储自定义类的对象时,如果没有重写hashCode()方法,那么将会调用Object类的hashCode(),得到当前对象的地址值,如果我们希望将属性相同的对象去重复,那么属性相同的对象必须要返回相同的哈希值

g)  TreeSet是可以去重复严肃并且可以按照指定顺序排序,在使用TreeSet存储自定义类的对象时,需要实现Comparable接口(可比较的),然后重写compareTo方法,在方法中比较算法,返回正数,负数或者0

4 Map

1)  Map<k,v>键,值

2)  要保证键的唯一性

3)  存储使用put方法

4)  HashMap:使用哈希算法对Key对象去重复,效率高

5)  TreeMap:(类似TreeSet)可以指定排序算法,用二叉树形式对Key对象进行存储

6)  遍历:

a) Set<Peseon> set=map.KeySet();得到键值

b) Set<Entry<Person,String>> Set = map.entrySet();Entry是一个键和一个值组成。

     Entry对象.getKey();Entry对象.getValue();

7)  LinkedHashMap:HashMap的子类,原理相同,可以保留存储顺序

8)  Hashtable:实现原理和HashMap相同,线程安全,效率低,不允许空键和空值:map.put(null,null)不能这样写,要出空指针异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值