1、Collection和Collections区别:

  Collection是java的一个集合接口,集合类的顶级接口

  Collections是一个包装类(工具类),不能被实例化(由于其构造函数设为私有的private),其中包含了各种关于集合操作的静态方法,服务于Collection集合框架

2、List与Set接口的区别:

  List和Set都是由Collection派生而来,其中List内的元素有序且可重复,set内的元素无序且不可重复。。。

List接口有三个实现类:ArrayList,Vector,LinkedList

     Set<String> s = new HashSet<String>();
s.add(null);
s.add(null);
System.out.println(s.size()); // List<String> l = new ArrayList<String>();
l.add(null);
l.add(null);
System.out.println(l.size()); //

3、HashMap,HashTable,TreeMap之间的区别:

  想要理清集合类或接口之间的关系。。。首先就得看看源码他们之间存在何种的继承实现关系。。。 

 ~HashMap:public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>

    ~AbstractMap:public abstract class AbstractMap<K,V> implements Map<K,V>

  ~HashTable:public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>

    ~Dictionary:public abstract class Dictionary<K,V>

  ~TreeMap:public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>

    ~NavigableMappublic interface NavigableMap<K,V> extends SortedMap<K,V>

      ~SortedMap:public interface SortedMap<K,V> extends Map<K,V>

  (1):HashTable中的方法是同步的,在多线程的应用程序中,不用专门的操作就可以安全的使用HashTable,而对于HashMap

      则需要额外的同步机制,其可以通过集合工具类Collections中的Collections.synchronizedMap(Map m)来实

      现多线程安全,TreeMap中的方法也是不同步的。在单线程情况下,HashMap的效率要高于HashTable

  (2):在HashMap中可以允许null作为键且这样的键只有一个,可以允许一个或多个的键对应的值为null,当get()方法返回null时,

      既可以表示HashMap中没有该键,也可以表示存在该键且该键所对应的值为null,因此在HashMap中不能用get()方法来

      判断HashMap中是否存在该键,而是应该用containsKey()来判断

Map<String, Object> map = new HashMap<String, Object>();

map.put(null, "hello");    
map.put(null, "world");    
map.put("linjm01", null);    
map.put("linjm02", null); System.out.println("hello:" + map.get(null));    //hello:world
System.out.println("linjm01:" + map.get("linjm01"));    //linjm01:null
System.out.println("linjm02:" + map.get("linjm02"));    //linjm02:null
System.out.println("linjm03:" + map.get("linjm03"));    //linjm03:nul Map<String, Object> table = new Hashtable<String, Object>();
table.put(null, "world");
table.put("table01", null);
        
System.out.println("table:" + table.get(null));    //java.lang.NullPointerException
System.out.println("table:" + table.get("table01"));    //java.lang.NullPointerExceptio

(3):存取值的输出顺序:其中TreeMap中的元素是按照键来进行排序的TreeMap自定义排序用法

     Map<String, Object> map = new HashMap<String, Object>();

        map.put("map1", 1);
map.put("map2", 2);
map.put("map3", 3); for (Entry<String, Object> entry : map.entrySet()) {
System.out.println("key:" + entry.getKey() + " value:" + entry.getValue());
} /**
* map输出:
* key:map3 value:3
* key:map2 value:2
* key:map1 value:1
* */ Map<String, Object> table = new Hashtable<String, Object>(); table.put("table1", 10);
table.put("table2", 11);
table.put("table3", 12); for (Entry<String, Object> entry : table.entrySet()) {
System.out.println("key:" + entry.getKey() + " value:" + entry.getValue());
} /**
* table输出:
* key:map3 value:3
* key:map2 value:2
* key:map1 value:1
* */ Map<String, Object> tree = new TreeMap<String, Object>(); tree.put("world", 101);
tree.put("hello", 102);
tree.put("tree", 103);
tree.put("hi", 104);
tree.put("welcome", 105); for (Entry<String, Object> entry : tree.entrySet()) {
System.out.println("key:" + entry.getKey() + " value:" + entry.getValue());
} /**
* tree输出:
* key:hello value:102
* key:hi value:104
* key:tree value:103
* key:welcome value:105
* key:world value:101
* */

  (4):HashMap与HashTable的数据结构都是哈希表,而TreeMap的数据结构是二叉树。

   (5):ConcurrentHashMap是线程安全的,不过不同于hashTable,具体请参考JDK1.5查看原理,

    主要采用表分段、锁分离技术实现线程安全。。。

    HashTable使用Synchronized是锁住整张Hash表让线程独占、、、

   而ConcurrentHashMap则不同。。将整张Hash表分为多个片段。。。每个片段都有自己的锁进行控制。。。

   因此可以实现并发地实现修改操作。。。

4、ArrayList、Vector、LinkedList三者的异同点:

  (1):在初始化ArrayList时没指定初始化长度的话,默认的长度是10;

     ArrayList在增加新元素且超过了原始容量的话,ArrayList的扩容方案为原始容量的(3/2+1)1.5倍;

     Vector的扩容方案为原始容量的2倍;

  (2):ArrayList是非线程安全,而Vector类中的方法是同步的,在多线程的应用程序中,直接用Vector是安全的,

    在单线程的应用程序中,使用ArrayList的效率要高于Vector,说白了,Vector就是ArrayList在多线程应用下的一个替代

  (3):LinkedList是链式线性表,ArrayList是数组线性表,其区别:

    1):LinkedList适用于需要频繁地进行插入和删除操作,但随机访问速度慢,查找一个元素需要从头开始一个一个找

    2):ArrayList随机访问速度快,但不适用于需要频繁地进行插入和删除操作,因为每次插入和删除都需要移动数组中的元素

    3):两者都不是线程安全的

    4):LinkedList实现了Deque接口,而Deque接口又继承了Queue接口,因此LinkedList也可以被当做堆栈来使用      

 附录:

     /** List接口 */
List<String> l1 = new ArrayList<String>(); List<String> l2 = new Vector<String>(); List<String> l3 = new LinkedList<String>(); /** Set接口 */
Set<String> s1 = new HashSet<String>(); Set<String> s2 = new LinkedHashSet<String>(); Set<String> s3 = new TreeSet<String>(); /** Map接口 */
Map<String, Object> map = new HashMap<String, Object>(); Map<String, Object> table = new Hashtable<String, Object>(); Map<String, Object> tree = new TreeMap<String, Object>();

对于java中数组转list和list转数组的用法:  

    /** 数组转list */
String[] array = {"hello", "world", "simope", "wsview", "java"};
List<String> list = new ArrayList<String>();
list = Arrays.asList(array);
for (String str : list) {
System.out.print(str + " ");
} System.out.println("\n=============================="); /** list转数组 */
String[] arr = new String[list.size()];
list.toArray(arr);
for (int i = 0, len = arr.length; i < len; i++) {
System.out.print(arr[i] + " ");
}

其中Arrays类中提供的方法都为静态方法。。。主要用于实现数组的快速排序和搜索等。。。

集合中也有对应的类专门服务于集合操作。。。Collections类。。。

JAVA_集合框架虐我千百遍,虐也是一种进步的更多相关文章

  1. 微软虐我千百遍——记一次比较漫长的TFS数据库迁移

    起因 七月三日早晨刚到公司,同事就跟我讲TFS开始返回 TF30042错误,报告数据库已满.按照处理问题的第一直觉,我上bing的英文网站搜了一下,发现是部署TFS的时候使用的SQL Express限 ...

  2. 一个虐你千百遍的问题:“RPC好,还是RESTful好?”

    看到知乎上有这样一个问题 WEB开发中,使用JSON-RPC好,还是RESTful API好? 还有其他优秀的推荐方案吗? -------------------------------------- ...

  3. Maven 虐我千百遍,我待 Maven 如初恋

    前言 在如今的互联网项目开发当中,特别是Java领域,可以说Maven随处可见.Maven的仓库管理.依赖管理.继承和聚合等特性为项目的构建提供了一整套完善的解决方案,可以说如果你搞不懂Maven,那 ...

  4. Maven虐我千百遍,我待Maven如初恋

    前言 在如今的互联网项目开发当中,特别是Java领域,可以说Maven随处可见.Maven的仓库管理.依赖管理.继承和聚合等特性为项目的构建提供了一整套完善的解决方案,可以说如果你搞不懂Maven,那 ...

  5. 漫说测试 | 研发虐我千百遍,我待bug如初恋

    的行业之一他们的运筹帷幄,他们的勾心斗角,只有自己知道.000,但绝对也是最枯燥的行业之一! IT可能是几个最高薪行业之一,但同时也绝对是最辛苦的行业之一!IT业是最需要创新能力的行业之一,但绝对也是 ...

  6. 硬不硬你说了算!35 张图解被问千百遍的 TCP 三次握手和四次挥手面试题

    每日一句英语学习,每天进步一点点: 前言 不管面试 Java .C/C++.Python 等开发岗位, TCP 的知识点可以说是的必问的了. 任 TCP 虐我千百遍,我仍待 TCP 如初恋. 遥想小林 ...

  7. java_集合框架

    一.集合框架图 二.Collection接口     Collection中可以存储的元素间无序,可以重复的元素.     Collection接口的子接口List和Set,Map不是Collecti ...

  8. 被 GANs 虐千百遍后,我总结出来的 10 条训练经验

    一年前,我决定开始探索生成式对抗网络(GANs).自从我对深度学习产生兴趣以来,我就一直对它们很着迷,主要是因为深度学习能做到很多不可置信的事情.当我想到人工智能的时候,GAN是我脑海中最先出现的一个 ...

  9. 【Java_集合框架Set】HashSet、LinkedHashSet、TreeSet使用区别

    HashSet:哈希表是通过使用称为散列法的机制来存储信息的,元素并没有以某种特定顺序来存放: LinkedHashSet:以元素插入的顺序来维护集合的链接表,允许以插入的顺序在集合中迭代: Tree ...

随机推荐

  1. 编写Java应用程序。首先,定义一个Print类,它有一个方法void output(int x),如果x的值是1,在控制台打印出大写的英文字母表;如果x的值是2,在 控制台打印出小写的英文字母表。其次,再定义一个主类——TestClass,在主类 的main方法中创建Print类的对象,使用这个对象调用方法output ()来打印出大 小写英文字母表。

    package zuoye; public class print1 { String a="abcdefghigklmnopqrstuvwxyz"; String B=" ...

  2. python中mysqldb的用法

    1.引入MySQLdb库 import MySQLdb 2.和数据库建立连接 conn=MySQLdb.connect(host="localhost",user="ro ...

  3. iOS tabbar 自定义小红点 消息显示,定制边框、颜色、高宽

    一般我们需要显示消息数,会利用到系统提供的api UIApplication.sharedApplication().applicationIconBadgeNumber = 10 但如果我们不想显示 ...

  4. mongodb主从数据同步

    1. 下载mongodb 下载地址:https://www.mongodb.org/dl/linux/x86_64-rhel62 2. 解压tar zxf mongodb-linux-x86_64-r ...

  5. ES6箭头函数(Arrow Functions)

    ES6可以使用“箭头”(=>)定义函数,注意是函数,不要使用这种方式定义类(构造器). 一.语法 1. 具有一个参数的简单函数 var single = a => a single('he ...

  6. TCL校园招聘——软件开发工程师(java) 只招5个。。。

    简介 TCL集团股份有限公司创立于1981年,是全球性规模经营的消费类电子企业集团之一,广州2010年亚运会合作伙伴,总部位于广东省惠州市仲恺高新区TCL科技大厦.旗下拥有TCL集团.TCL多媒体科技 ...

  7. 二:Go编程语言规范-类型

    1.类型 布尔值,数值与字符串类型的实例的命名是预声明的. 数组,结构,指针,函数,接口,切片,映射和信道这些复合类型可由类型字面构造. 每个类型 T 都有一个 基本类型:若 T 为预声明类型或类型字 ...

  8. 浅谈Java泛型之<? extends T>和<? super T>的区别

    关于Java泛型,这里我不想总结它是什么,这个百度一下一大堆解释,各种java的书籍中也有明确的定义,只要稍微看一下就能很快清楚.从泛型的英文名字Generic type也能看出,Generic普通. ...

  9. 中午游泳很海皮-linux&php

    hi 中午又去游泳了,其实本来打算是昨天去的,谁知天公不作美,周一都下雨.今天其实也一样的,有点小雨,不过游得到泳,比什么都好 1.PHP&MySQL -----PHP内置MySQL函数学习( ...

  10. MMORPG大型游戏设计与开发(客户端架构 part9 of vegine)

    时间在人们的生活中是多么重要的东西,如果打乱了时间,不知道这个时间会成什么样子.在客户端中,自然也有时间模块,因为不同的时间可能会处理不同的事情,特别是在追求高度自由化的同时,时间也成为了一个很重要的 ...