Java 复习 —— 集合

1、类的基本结构

Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set

|-HashSet

|-TreeSet

Map
├Hashtable
├HashMap
└WeakHashMap

2、基本概念

0)Collection : 顶层接口,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素。public interface Collection<E> extends Iterable<E>

1)Set(集合):集合中的对象不按特定方式排序,并且没有重复对象。它的有些实现类(TreeSet)能对集合中的对象按特定方式排序。
2)List(列表):集合中的对象按索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检索对象。
3)Map(映射):集合中的每一个元素包含一对键对象和值对象,集合中没有重复的键对象,值对象可以重复。

3、实现类的重要区别

1)ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计到数组元素移动等内存操作,所以索引数据快插入数据慢;这就是线性表的顺序表的优点和缺点,即查询快,删除、插入较慢。

2)Vector由于使用了synchronized方法(线程安全)所以性能上比ArrayList要差,但是在一些安全方法里面他是很有用的。想要把一个List作为同步的线性表时,可以这样使用:Collections.synchronizedList(list);

3)LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,但是插入数据时只需要记录本项的前后项即可,所以插入数度较快!这就是线性表的链表的优点和缺点,即查询慢,但是删除插入快。可以用它作为队列。

4)Stack继承自Vector,实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。基本的push和pop方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。

5)Queue 是一个Collection的子接口,Deque 是1.6 新增的接口继承了Queue接口,他的子类主要就是完成队列的栈的功能,相比之前的采用Stack或List(LinkedList实现了Deque)作为队列与栈效果都要好,而且,Deque 是可以同时作为队列和堆栈,他与List的一个很大区别是他没有Index索引查找元素。所以,如果需要使用队列或堆栈时可以考虑Deque的子类:ArrayDeque

6)Set的实现其实和Map有着重大关系,看源代码你就会发现,Set就是Map的key部分,Map的value则是一个常量替代。

4、其他注意事项

注意,开始学习的时候大家都认为,集合给我们最大的好处就是什么对象都可以存入,如果是数组的话只能存入特定类型的对象,其实这个特点是集合的缺点,这也就是为什么有泛型的出现,对于数组来说,集合的最大有点是集合可以边长存储元素!!如果是一个Object类型的数组不也一样可以存储任何数据类型的对象吗?但是这样又有什么用呢?类型转换是一个危险操作。

5、集合遍历与删除

 private void print(Collection<String> list ){
  Iterator<String> iter = list.iterator();
  while(iter.hasNext()){
   String str = iter.next();
   if(str.equals("key")){
    iter.remove();
   }
  }
 }

不能采用其他方式的for循环删除元素,否则会发生异常:java.util.ConcurrentModificationException

时间: 2024-08-28 11:44:43

Java 复习 —— 集合的相关文章

Java复习-集合

Java的集合大致分为以下几类 map set list queue set代表无序,不可重复的集合 list代表有序,重复的集合 map代表了映射关系的集合 queue代表的是一种队列集合 从上面的图我们可以看出,访问set集合的时候我们只能根据元素本身来访问,访问list集合的时候可以直接根据元素的索引来访问,如果访问map集合中的元素,可以根据每项的key值访问元素,collection是list map queue的父接口,该接口里定义的方法,可以操作set map queue pack

Java 复习 —— 集合与数组的转换

前言: 很多时候,你会觉得数组使用方便,有些时候你会觉得集合使用更加方便,你们对于集合和数组的转换那就在所难免了,下面总结一下数组与集合的转换. 1.把数组转为集合 Arrays.asList()  1)网上解释 在使用Arrays.asList()后调用add,remove这些method时出现 java.lang.UnsupportedOperationException 异常.这是由于Arrays.asList() 返回java.util.Arrays$ArrayList, 而不是Arra

Java 复习 —— 集合数组帮助类

1.集合帮助类 基本就这些了,关键是要了解 Collections 是集合的帮助类,不是数组的帮助类: 1)生成只读的集合实例对象 Collections.singletonList--用来生成只读 的单一元素的List Collections.singletonMap--用来生成只读 的单Key和Value组成的Map Collections.singleton--用来生成只读 的单一元素的Set Collections.unmodifiableList--用来生成只读 的List Colle

java复习整理之集合

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.ios培训..Net培训</a>.期待与您交流!------ java复习整理之集合: Collection:集合中的最顶层接口,提供了一些操作集合的共性方法添加:boolean add(E e)boolean addAll(Collection<? extends E> c)删除:void

Java复习第三天---集合框架的相关知识

集合框架总览: Collection 接口常用方法 //1.add()向集合中添加数据 c.add(apple01); c.add(apple02); c.add(apple03); c.add(apple04); c.add(apple05); //2.isEmepty()检测当前集合是否为空 boolean empty = c.isEmpty(); System.out.println("is empty:"+empty); //3.size()返回当前集合的长度 int size

[Java复习02] 集合框架Collection - 面试题小结

Q1 Collection java的集合以及集合之间的继承关系? 数组和链表的区别? 固定长度,连续内存,不能扩展,随机访问快,插入删除慢.链表相反 List, Set, Map的区别? List,Set继承Collection接口 List可以放重复数据,Set不能,Map是k-v对 List和Map的实现方式以及存储方式? ArrayList: 底层动态数组.随机访问快,增删慢,线程不安全. 扩容导致数组复制,批量删除会导致找两个集合交集,效率低. LinkedList: 底层链表(双向列

java 复习001

java 复习001 比较随意的记录下我的java复习笔记 ArrayList 内存扩展方法 分配一片更大的内存空间,复制原有的数据到新的内存中,让引用指向新的内存地址 ArrayList在内存不够时默认是扩展为1.5倍 + 1个 ArrayList,LinkedList,Vector 区别 Vector内存扩展和ArrayList一样,不过Vector是默认扩展为2倍 Vector支持线程的同步,因此牺牲了访问性能 ArrayList,Vector都是使用数组实现,插入删除效率低 Linked

java复习汇总之面试篇

这些个人感觉都是基础,希望看的园友不要喷. 1.什么是servlet线程安全,如何解决? 2.spring事物管理,在项目中你是怎么管理事物的? 3.java中的有几种线程? 4.java有几种锁? 5.怎么理解java中的多态,项目中何时用到抽象类? 6.如何处理js,sql注入? 7.struts2拦截器的原理? 8.如何理解spring AOP? 11.java中常用的集合,在项目中用到时,有什么需要注意的? 12.如果优化项目中sql,为什么要那样优化? 13.java性能优化? 14.

六:Java之集合

集合包含的内容很多,我发现一个很好的博客,感觉自己都没有写的必要了! 链接献上  Java集合 六:Java之集合,布布扣,bubuko.com