集合的简单分析浅见

集合collection,分为list与set,其中,,list有三个子类:ArrayList,LinkedList,Vector;

(一)List是存取有序的集合,不是大小有序,想要排序可以使用Coolections.sort(list),list中可以存入null值可以存入重复值;

  1.Vector是基于数组的list,是线程同步的,其中的方法使用了Synchronized;

  2.ArrayList也是基于数组的list,不过,它不是线程安全的;

  3.LinkedList是基于链表结构的,每个节点包含了两点内容:它本身的数据结构,还有下一个节点的信息用于连接;

  4.ArrayList的结构特点:查询快,增删慢:基于数组结构可以根据索引迅速定位到想要的具体位置而查询出目标;在指定位置增加一个元素时,会新建一个数组,将指定元素放入指定位置,而后将原数组内容按照原来的索引放入新的数组中;删除一个指定位置的元素时同样如此,会新建一个数组,将原数组的内容除了指定要删除的元素以外的元素放入新的数组中;

  5.LinkedList的结构特点:查询慢,增删快:基于链表结构可以直接修改一个元素的下一个节点信息,就可以将新的节点与原有的链表链接;而想要在链表结构的list中查询一个元素,就会从第一个元素节点开始向后遍历查询;

(二)Set集合也可以存入null值,但是它不能包含重复的元素;Set集合都是基于map实现的;

  1.HashSet:基于HashMap实现了Set接口,把HashMap的key键作为Set的对应存储项,所以不能存入重复值;HashMap的底层是一个hash表结构,hash表的底层还是一个数组结构,元素在存入hashMap时会先通过hashCode算法再结合数组结构得到一个数组的索引,再判断该位置是否有数据,没有则存入,有则使用equals方法比较,相同则舍弃,不同则存入;注意:使用HashSet存入一个自定义对象时,要重写hashcode方法与equals方法,因为内容不同的对象根据原始Hashcode方法结合数组长度计算出的索引可能相同!

  2.LindedHashSet:是HashSet的子类,链表结构;

  3.TreeSet:是SortedSet的子类,使用了Sort()方法,排列有序;通过SortedMap实现的;底层是TreeMap实现了Set接口;底层是二叉树结构的;存储流程:存入一个元素时,如果是首个元素,则作为根节点,否则与根节点比较大小,大于根节点则放在右侧,小于根节点则放在左侧,等于根节点则舍弃;通过比较大小来保证元素的唯一与排序;二叉树结构存储的元素必须是可以比较大小的!因为他在调用add()方法时,底层调用了TreeMap的put()功能,而在put()的源码中,把先要添加的元素都给强制转为Comparable类型的了;

  4.TreeMap的put()功能将想要存入的元素,实现了Comparable接口,Comparable接口会强行对实现他的类的对象进行排序,即类的自然排序,CompareTo被称为他的自然比较方法,Integer类已经实现了此接口,所以TreeSet可以直接存储数值;

  5.想要向TreeSet中存入自定义的非数值对象,就必须让此对象事项Comparable接口,实现compareTo方法,但是,想要比较自定义的对象的多个元素大小,就必须和HashMap存入自定义对象重写equals方法一样,比较多个变量;

  6.也可以自定义比较器,在创建TreeSet时直接传入,这样,在TreeSet中元素比较大小时,就会调用此自定义比较器,相对于自然排序,这个是比较器排序.

(三)遍历list的方法:

  1.将list集合转为数组再遍历:Array myArray = mylist.toArray();

  2.利用list.size(),普通for;

  3.增强for;

  4.使用迭代器Interator;

  5.使用ListInteratot,这个迭代器,只能用于迭代list的子类;

(四)遍历set的方法:

  因为set是存取无序的,没有对应的索引,所以只能使用迭代器或者增强for,这两种方法;

(五)键值对Map

  1.HashMap:不是线程同步的可以存null;

  2.HashMap:是线程同步的,不可以存null;

  3.LinkedHashMap:链表结构,线程不同步;

  4.TreeMap:二叉树结构,线程不同步;

(六)map的遍历:

  1.myMap.Entry,是map内部的泛型接口,定义为Entry<k,v>,他表示map中的一个实体,接口有getKey(),getValue();

     myMap.entrySet():返回一个实体,即返回了map值中的所有键值对,得到了一个set,再遍历Set,每个Entry对象的   

                                   getKey(),getValue()就可以获取key和value;

  3.myMap.ketSet():获得所有的key组成的set,而后使用map.get(k)获取v;

  4.myMap.values():只是获取所有的value组成的集合;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值