java集合学习笔记



        Java的集合类主要由两个接口派生而出:Collection和 map;


 

 

 



Java集合大致可以分为4类:

Set:代表无序、不可重复的集合;

List:代表有序、重复的集合;

Map:代表具有映射关系的集合;

Queue:代表队列集合的集合;

                               

         

         如图,如果访问List集合中的元素,可以直接根据元素的索引来访问;

         如果访问map集合中的元素,可以根据每一项元素的Key来访问对应的Value;

         如果访问set集合中的元素,只能根据元素本身来访问;

 

 

Collection接口的操作方法:

l  boolean    add(Object o)  

         向集合添加一个元素,成功返回true;

l   boolean    addAll(Collection<? extends E>c)  

         将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。 

l  void   clear()  

         移除此 collection 中的所有元素(可选操作)。 

l   boolean    contains(Object o)  

         如果此 collection 包含指定的元素,则返回 true。 

l  boolean   containsAll(Collection<?> c)  

         如果此 collection 包含指定 collection 中的所有元素,则返回 true。 

l  boolean    equals(Objecto)  

         比较此 collection 与指定对象是否相等。 

l  int    hashCode()  

         返回此 collection 的哈希码值。 

l  boolean    isEmpty()  

         如果此 collection 不包含元素,则返回 true。 

l  Iterator<E> iterator()  

         返回在此 collection 的元素上进行迭代的迭代器。 

l  boolean    remove(Objecto)  

         从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。 

l  boolean   removeAll(Collection<?> c)  

         移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。 

l  boolean   retainAll(Collection<?> c)  

         仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。 

l  int  size()  

         返回此 collection 中的元素数。 

l  Object[]   toArray()  

         返回包含此 collection 中所有元素的数组。 

 

l  toArray(T[] a)  

         返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。

 

新增方法:

     Java 8 为Collection 集合新增removeIf (Predicate filter)方法:批量删除集合中符合filter条件的元素;

 

//创建集合

Collection books = new HashSet();

Books.add(new String (“***************”));

Books.add(new String (“***************”));

Books.add(new String (“***************”));

//使用lamba表达式进行过滤集合

Books.removeIf(ele ->((String)ele).length() < 10);

 

Iterator

         Iterator接口是java集合框架的成员,与Collection和map不同的是,iterator主要用于遍历Collection中的元素,而非作为容器去装在集合;

并且Iterator接口是Collection接口的父接口。Collection集合可以直接调用迭代器的方法;

Iterator 仅用于遍历,使用之前需要依赖一个迭代的集合,所以iterator必须依附于一个Collection对象。

 

//实例化

Collection books = new ArrayList();

//父类应用指向子类,books的集合

Iterator it = books.iterator();

//调用迭代器的方法

It.hasNext();

 

 

Iterator的方法有:

l  Boolean hasNest();如果被迭代的集合元素还灭有被遍历完,则返回TRUE;

l  Object next();返回集合下一个元素;

l  Void remove(); 删除集合里上一次next 方法返回的元素;

l  Void forEachRemaining (Consumer action );可以使用lamba表达式遍历集合元素;

 

 

Set集合

Set集合继承自Collection ,拥有Collection的方法,而且使用方法基本相同;不同点在于set集合不能添加重复的元素(hashSet /treeSet/enumSet);

 

HashSet是Set接口的典型实现类。它按照Hash算法来存储集合中的元素。

1.      有顺序,但是顺序可能发生变化;

2.      HashSet非线程同步,同一时间多个线程访问一个hashset,需要通过代码保证hashset的同步;

3.      集合元素的值可以是null;

 

Set集合具有hashCode()和equals()两个方法;存储元素时,Set集合会根据hashcode()方法决定该元素的存储位置;equals()方法会对元素的value进行判断识别;在Set集合中,只有两个元素的hashcode()和equals()方法分别返回相同的结果时,才表明两个元素时相同的(在Set集合中)。如果元素的hashcode()或者equals()方法返回的结果有异,则表明两个个元素不同;

   Hash算法相比与数组的优点是:数组元素的索引是连续的,并且数组的长度是固定的,无法自由增加数据的长度。但是运用hash算法就不同了,hash算法采用了hashCode来计算存储位置,并且可以自由增加存储长度。而且元素查询时是根据返回的hashcode存取的,相对数组,速度比较快;

 

LinkedHashSet

LinkedHashSet同属Set集合,它使用hashcode()进行元素存储位置的决定,但是不同于hashSet,LinkedHashSet使用链表结构维护元素的顺序,结果就是,当遍历该集合元素时,LinkHashSet会按照元素的添加顺序来访问集合中的元素;

 

TreeSet

TreeSet是SortedSet的实现类,它的元素都是出于排序状态;TreeSet提供了访问次序函数和截取子集的方法;

l  Comparator comparator()

l  Object first();

l  Object last();

l  Object lower(object c);

l  Object higher(object e);

l  SortedSet subset(Object fromElement,Object toElement);

l  SortedSet headset(Object toElement)

l  SortedSet tailSet(Object fromElement)

 

总体来讲,HashSet比TreeSet的性能要好一些,表现在添加、查询领域方面;TreeSet的特点在于它的有序;

Set的三个实现类hashSet treeSet EnumSet 都是线程不安全的,在多个线程访问同一个Set时,需要手动保证该Set集合的同步性。

 

 

List集合

List接口的父接口是Collection接口,拥有Collection方法的所有方法,且List是有序且可以重复的集合;

l  Void add(int index,Object element); 将元素插入index位置;

l  Boolean addAll(int index ,Collection c);将集合全部插入index位置;

l  Object get(int index);              返回集合index位置的元素;

l  Int indexOf(Object o);             返回o在集合中第一次出现的位置;

l  Object remove(int index);          返回o在集合中最后一次出现的位置;

l  Object set (int index ,Object element); 将index位置的元素替换成element;

l  List subList(int fromIndex,int toIndex);  返回从fromindex -1  到 toindex 之间的所有元素;

l  Void sort(Comparator c ) ; 集合根据Comparator参数对List 进行某种排序;

 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值