一、Collection 与 Collections的区别:
1. Collections:
java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。

2. Collection:
Collection是最基本集合接口,它定义了一组允许重复的对象,提供了对集合对象进行基本操作的通用接口方法,其意义是为各种具体的集合提供了最大化的统一操作方式。

二、Collection 基础:
1. Collection接口派生了两个子接口Set和List,分别定义了两种不同的存储方式,如下:

(1)List  是实现了List接口的集合类,有序且可以重复,两个重要的实现类 ArrayList和LinkedList,特性如下:
        ArrayList: 底层是维护了一个Object数组实现的。 特点: 查询速度快,增删慢。
        LinkedList:底层是使用了双向链表数据结构实现的, 特点: 查询速度慢,增删快。 
   Vector(不常用):  底层也是维护了一个Object的数组实现的,实现与ArrayList是一样的,但是Vector是线程安全的,操作效率低。

(2)Set 是实现了Set接口的集合类,无序且不可重复。两个重要的实现类HashSet和TreeSet
  HashSet:  底层是使用了哈希表来支持的,特点: 存取速度快. 
  TreeSet:   如果元素具备自然顺序 的特性,那么就按照元素自然顺序的特性进行排序存储。

2. Collection接口中的方法:

(1) 增加
  add(E e)  添加成功返回true,添加 失败返回false.
  addAll(Collection c)  把一个集合 的元素添加到另外一个集合中去。

(2) 删除
  clear() 
  remove(Object o) 
  removeAll(Collection  c) 
  retainAll(Collection  c)

(3) 查看
  size()

(4)  判断
  isEmpty() 
  contains(Object o) 
  containsAll(Collection<?> c)

(5) 迭代
  toArray() 
  iterator()

3. Map&Iterator接口及Comparable接口
1) Map接口:
该接口描述了从不重复的键到值的映射。Map接口用于维护键/值对(key/value pairs)。
        特征:它描述了从不重复的键到值的映射。两个重要的实现类:HashMap和TreeMap
        HashMap:基于哈希表实现,特点就是键值对的映射关系。一个key对应一个Value。HashMap中元素的排列顺序是不固定的。更加适合于对元素进行插入、删除和定位。
        TreeMap:基于红黑树实现。TreeMap中的元素保持着某种固定的顺序。更加适合于对元素的顺序遍历。

2) Iterator接口:
  集合访问器,用于循环访问集合中的对象。所有实现了Collection接口的容器类都有iterator方法,用于返回一个实现了Iterator接口的对象。
Iterator对象称作迭代器,Iterator接口方法能以迭代方式逐个访问集合中各个元素,并可以从Collection中除去适当的元素。

3) Comparable接口:
  可以用于比较的实现,实现了Comparable接口的类可以通过实现comparaTo方法从而确定该类对象的排序方式。

4) Map常用的遍历方式:

Map<Integer, String> map1 = new HashMap<Integer, String>();
map1.put(1, "one");
map1.put(2, "two");
map1.put(3, "three"); for(Map.Entry entry: map1.entrySet()){
System.out.println("key="+entry.getKey()+", value="+entry.getValue());
} Iterator<Map.Entry<Integer, String>> it = map1.entrySet().iterator();
while (it.hasNext()){
Map.Entry<Integer, String> entry = it.next();
System.out.println("key="+entry.getKey()+", value="+entry.getValue());
}

  

三、HashMap和Hashtable的区别
1. HashTable:
  线程安全的,多个线程可以共享一个Hashtable;而如果没有正确的同步的话,多个线程是不能共享HashMap的。
Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好,单线程环境下它比HashMap要慢。

2. HashMap:
  非synchronized,并可以接受null(HashMap可以接受为null的键值(key)和值(value),而Hashtable则不行。
  HashMap不能保证随着时间的推移Map中的元素次序是不变的。
  另外,HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。

四、 其他

(1)poll()方法和remove()方法的区别?

   poll()在获取元素失败时会返回空,remove()失败的时候会抛出异常。

(2)用哪两种方式来实现集合的排序?

  可以使用有序集合如TreeSet或者TreeMap,也可以使用有顺序的集合如list,然后通过Collections.sort()来排序。

(3)ArrayList和HashMap的默认大小是多少?

  JAVA 7中, ArrayList默认是10个元素,HashMap默认是16个元素(必须是2的幂)

(4)Comparator与Comparable的区别?

  Comparator通常用于定义用户定制的顺序,Comparable常用于定义对象的自然顺序,Comparable总是只有一个,但可以有多个Comparator来定义对象的顺序。

(5)32位和64位JVM最大堆内存分别是多少?

   32位JVM堆内存可达到2^32=4G, 但实际上会比这个小得多,不同操作系统之间不同,如windows大约1.5G,

   64位JVM堆内存可达到2^64,  实际上可以指定堆内存的大小。

(6)编写多线程程序时会遵循哪些最佳实践?

  1)给线程命名,这样易于调试;

  2)最小化同步范围,只对关键部分同步,而不是将整个方法同步;

  3)如果可以,更偏向于volatile而不是synchronized;

  4) 使用更高层次的并发工具,而不是wait()和notify()来实现线程间通信,如BlockingQueue,CountDownLatch及Semeaphore;

  5) 优先使用并发集合,而不是对集合进行同步。并发集合提供更好的可扩展性。

JAVA常用知识点总结---集合篇的更多相关文章

  1. JAVA常用知识点及面试题总结

    1. String.StringBuffer.StringBuilder三者区别? (1)三者在执行速率上的比较: String<StringBuffer<StringBuilder 原因 ...

  2. Java面试知识点之线程篇(一)

    前言:在Java面试中,一定会遇到线程相关问题,因此笔者在这里总结Java中有关线程方面知识点,多数从网上得来(文中会贴出主要参考链接),有些也是笔者在面试中所遇到的问题,如有错误,请不吝指正.主要参 ...

  3. Java 常用知识点

    Java 常用知识点 1.日期格式化 SimpleDateFormat Date date=new Date(System.currentTimeMillis()) ; SimpleDateForma ...

  4. Java面试知识点之线程篇(三)

    前言:这里继续对java线程相关知识点进行总结,不能间断. 1.yield()方法 yield()的作用是让步.它能让当前线程由“运行状态”进入到“就绪状态”,从而让其它具有相同优先级的等待线程获取执 ...

  5. Java面试知识点之线程篇(二)

    前言:接上篇,这里继续对java线程相关知识点进行总结. 1.notify和notifyall的区别 notify()方法能够唤醒一个正在等待该对象的monitor的线程,当有多个线程都在等待该对象的 ...

  6. Java基础加强之集合篇(模块记忆、精要分析)

    千里之行,始于足下.把别人的变成自己,再把自己的分享给别人,这也是一次提升的过程.本文的目的是以一篇文章从整体把握集合体系又不失一些细节上的实现,高手路过. 集合的作用与特点 Java是一门面向对象语 ...

  7. Java 常用知识点汇总(数据类型之间转换、字符串的相关操作-截取、转换大小写等)

    1.Java四类八种数据类型 byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围- ...

  8. 2017年java面试题【集合篇】

    Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大和简单易用两个特征. 这里有10个经典的Java面试题,也为大 ...

  9. Java面试知识点之计算机网络篇(一)

    前言:在Java面试中,计算机网络的知识也是一项重点,因此笔者在此对计算机网络的相关知识进行总结. 1.OSI参考模型 自下而上:物理层(物理介质,比特流).数据链路层(网卡.交换机).网络层(IP协 ...

随机推荐

  1. web安全与防御

    xss攻击(跨站脚本) 是网站应用程序的安全泄露攻击,是代码注入的一种.它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响. 攻击原理 其特点是不对服务器端造成任何伤害,而是通过一些正 ...

  2. Java与算法之(1) - 冒泡排序

    冒泡排序法的原理是,每次比较相邻的两个元素,如果它们的顺序错误就把它们交换过来. 例如对4 3 6 2 7 1 5这7个数字进行从小到大的排序,从最左侧开始,首先比较4和3 因为是从小到大排序,4和3 ...

  3. JAVA获取客户端IP地址和MAC地址

    1.获取客户端IP地址 public String getIp(HttpServletRequest request) throws Exception { String ip = request.g ...

  4. 我的第一个python web开发框架(21)——小结

    这个小网站终于成功上线,小白除了收获一笔不多的费用外,还得到女神小美的赞赏,心中满满的成就感.这一天下班后,他请老菜一起下馆子,兑现请吃饭的承诺,顺便让老菜点评一下. 小白:老大,在你的指导下终于完成 ...

  5. PHP截取中英文字符串

    //如果字符串长度超过10,则截取并以省略号结尾 function sub($str){ $str=(string)$str; if( mb_strlen($str,'utf-8') >10){ ...

  6. git gui提交无法获知你的身份 20

    刚刚学习,请说的详细一些,谢谢 callct | 浏览 3382 次 我有更好的答案 1条回答 你没有定义你的名字和邮箱.你打开git console/shell, #输入下面两句,并且替换成你的名字 ...

  7. 前端自动化构建工具Gulp简单入门

    昨天听同事分享了Gulp的一些简单使用,决定自己也试一试. 一.安装 gulp是基于nodejs的,所以要先下载安装node(直接搜node,在官网下载就好了) 1.全局安装gulp npm inst ...

  8. eclipse导入项目之后报错

    一.项目本身就有错 二.jdk版本的问题 参考网址:http://jingyan.baidu.com/article/95c9d20da3ec5fec4e756186.html 从别的地方导入一个项目 ...

  9. 在eclipse中创建maven webapp项目时弹出错误-解决办法

    在eclipse中创建maven webapp项目时报错: Could not resolve archetype org.apache.maven.archetypes:maven-archetyp ...

  10. python3 第十九章 - 写一个10进制转任意进制的函数

    我们先回忆下之前所学的进制转换的知识(详见:第十章),10进制转其它进制的方法是: 整数部分,除基取余,逆序排列 小数部分,乘基取整,顺序排列 负数,按绝对值处理 好,假设我们需要转化的数都是正整数, ...