哈哈,今天我们来讲解一下有关于一些数组 或者是集合的知识点

  1.ArrayList,LinkedList,Vector的区别

    ArrayList,LinkedList,Vector都是实现List接口,但ArrayList,LinkedList不是同步的,

    而Vector是同步的,ArrayList是一个可改变大小的数组,当更多的元素加入到ArrayList中,

    其大小将会动态增长,内部元素可以直接通过get()与set()方法进行访问,因为ArrayList

    本质上是一个数组.

    Vector与ArrayList类似,但属于强同步类,这个是线程安全的,但是一般我们不使用Vector,

    因为如果在多线程之中,我们自己可以实现同步,当Vector与ArrayList更多元素添加进来会

    请求更大的空间,Vector每一次请求双倍空间,而ArrayList每一次对Size增长50%

    LinkedList是一个双链表,在添加和删除时比ArrayList具有更好的性能,但在get与set方面

    弱于ArrayList,在LinkedList中似有的内部类,private static class Entry{Object element;

    Entry next;Entry previous},则ArrayList的空间浪费主要体现在list列表的结尾预留一定的

    容量空间,而LinkedList的空间则体现在他的每一个元素都要消耗相当的空间

  2.String,StringBuffer与StringBuilder的区别

    String字符串的常量

    StringBuffer是字符串的变量(线程安全)

    StringBuilder字符串变量(非线程安全)

    String类中使用字符数组保存在字符串中,如下所示,因为"final"修饰符,所以知道对象不变

    private final char value[];

    StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder

    中也是使用字符数组保存字符串,如下所是,这两种对象都是可变的,char[] value;

    三者在执行速度方面的:StringBuilder>StringBuffer>String

    有一个特殊的例子

    String str = "This is only a"+ "simple"+"test" 

    StringBuffer buffer = new StringBuilder("This is only a").append("simple").append("tear")

    其实发现str的执行速度一点也不输给StringBuffer;但是其实是JVM一个把戏:

    Str = "This ia only a simple test",所以显得快,但是如果String a ="This is a only a",

    String b ="simple",String c="test",则str = a+b+c,则此时的速度就慢下来了

  3.Map,Set,List,Queue,Stack的特点与用法

    Map:键值对存放,一对一的往里面存,而且保证键的唯一性

    Hashtable:底层是哈希表数据结构,不可以存入null键null值,该集合是线程同步的

    HashMap:底层是哈希表结构,可以存入null键null值,该集合是不同步的,除了非同步和允许使用

      null值,HashMap和HashTable没有多大的区别

    TreeMap:底层是二叉树数据结构线程不同步,可以用于Map集合的键进行排序(记住,这不是

      你按放入的顺序进行排序,而是系统的内部定义的排序方法,如按字符串进行排序)

    Set:集合里面是无序的(存入和取出顺序不一致),元素不可重复

    HashSet:底层数据是哈希表,线程是非同的

    TreeSet:可以对集合中元素进行排序,底行数据结构是二叉树

    Queue接口与List,Set同一级别,都是继承Collection接口,其中队列是一种数组结构,符合先进先出

  4.HshMap和HashTable的区别

    1.HashTable继承Dictionary,则HashTable中不允许存放key或value为null的值

     HashMap继承AbstractMap,则允许在ke或value存放null值

    2.HashTable中有一个contains(Object value),但是由于怕引起误会,则在HashMap中删除掉,则在

     HashMap与HashTable中共有的方法为containsKey和containsValue方法

    3.Hashtable支持同步,则可以直接运用于多线程,而HashMap不支持同步,不能直接用于多线程

  5.HashMap和ConcurrentHashMap的区别,HashMap的底层源码

    1.HashMap的key与value的值都可以为null,但是ConcurrentHashMap的value值不能为null,否则会

      报HullPointerException

    2.从JDK1.2起,就有了HashMap,但是HashMap不是线程安全的,因此多线程操作要格外小心,在JDK1.5

      中,给我们带来concurrent包,从此Map包也有安全的

     解释:ConcurrentHashMap具体是怎么样实现线程安全的呢?肯定不是每一个方法加synchronized,那么

     就变成了HashTable

     从ConcurrentHashMap代码中可以看出,他引入了一个"分段锁"的概念,具体可以理解为把一个大的Map

     分为N个小的HashTable,根据key.hashCode()来决定把key放入哪个HashTable,在ConcurrentHashMap

     中,就是把Map分为N个Segment,put,get的时候,都是根据key.hashCode()算出放入到哪一个Segment.

     其实就是ConcurrentHashMap的工作机制,就是把整个Map分为N个Segment(类似HashTable),可以提供相同

     的线程安全,但是效率提升N倍,默认提升16倍

    HashMap底层源码:

    

put的源码:
public V put(K key,V value){
if(key == null) return putForNullKey(value);
int hash = hash(key);
int i = indexFor(hash,table.length);
for(Entry<K,V> e = table[i]; e!=null ;e=e.next){
Object k;
if(e.hash == hash && ((k = e.key)==key || key。equals(k))){
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}
modCount ++;
addEntry(hash,key,value,i)
return null;
}

  6.TreeMap,HashMap,LinkedHashMap的区别

    TreeMap实现Sortmap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,

    也是可以指定的排序的比较器,当用到iterator便利TreeMap时,得到的记录是排序过的

    LinkedHashMap保存了记录的插入顺序,在用iterator遍历LinkedHashMap时,先得到

    的记录肯定是先插入的,也可以在构造函数时用带参数,按照应用次数排序,在遍历的时候

    会比HashMap慢,不过有种情况例外,当HashMap容量很大,实际数量较少时,遍历起来可能

    会比LinkedHashMap慢,因为LinkedHashMap的遍历速度只有和实际数据有关,和容量无关,

    而HashMap的遍历速度和他的容量有关.

    HashMap:HashMap是一个最常用的Map,它根据键的hashCode的值存储数据,根据键可以直接

    获取他的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的,但是不支持同步,可以用

    Collections的synchronizedMap方法使HaspMap具有同步的能力,或者使用ConcurrentMap

    使用情况:

    我们最多使用的HashMap,HashMap里面存入的键值对在取出来的时候是随机的,它根据键的hashCode

    值存储数据,根据键可以直接获取它的值,具有很快的访问速度,在Map中插入和删除和定位元素,HashMap

    是最好的选择,TreeMap取出的是排序后的键值对.但如果你要是按自然顺序或自定义顺序遍历键,那么

    TreeMap会更好,LinkedMap是HashMap的一个子类,如果需要输出的顺序和输入的相同,那么用

    LinkedHashMap可以是实现,他还可以按读取顺序来排序,像连接池中可以应用

  7.Collection包结构,与Collections的区别

    Collection是集合类的上级接口,子接口有Set与List

    Collections是针对集合类的一个帮助类,提供了操作集合的工具方法,一系列静态方法实现对

    各种集合的搜索,排序,线程安全化等操作

JAVA-数组或集合的更多相关文章

  1. java 数组与集合(list)相互转化

    上代码 package com.core.array2collection; import java.util.ArrayList; import java.util.Arrays; import j ...

  2. java数组和集合的相互转换

    由于在学习过程中经常碰到这么一个问题,就是java中几种装数据的容器之间的转换,所以写了这篇随笔专门来总结这些转换方法. 数组转集合: 1.遍历,最常用的方法,但是过程会繁琐一点 int arrs[] ...

  3. java 数组和集合

    1.概念说明 区别:数组固定长度的,集合,数组的长度是可以变化的. List,继承Collection,可重复.有序的对象 Set,继承Collection,不可重复.无序的对象 Map,键值对,提供 ...

  4. Java数组转集合与集合转数组的坑

    在Java中将数组转为集合,会用到Arrays.asList()的方法,然而,这个方法却与我们的预期期望存在一些出入,当用到asList方法将数组转化成List列表时,对得到的List列表进行add( ...

  5. java数组或集合返回空的问题

    在有返回值的情况下,平时我写代码基本遇到错误什么都是返回null,我因为我觉得把数组或集合这个初始化占空间. 但是我发现这样在每次客户段调用都要进行非空判断,而且有时调用内置api还容易报错误,于是解 ...

  6. Java数组转集合之Arrays.asList()用法

    Arrays.asList()用法 使用Arrays.asList()的原因无非是想将数组或一些元素转为集合,而你得到的集合并不一定是你想要的那个集合. 而一开始asList的设计时用于打印数组而设计 ...

  7. JAVA数组和集合谁是儿子

    Java有哪些数据存储方式? 基本数据类型(1byte3整2小数1字符1布尔)分别是byte,short,int long,flort,double,char,boolean(颜色好喜庆的样子O(∩_ ...

  8. Java数组、集合的三种遍历方式(包懂)

    1 for循环 for(int i = 0;i<arr.length;i++){ System.out.print(arr[i]+" "); } 2 foreach循环,这种 ...

  9. Java数组、集合

    Vector类     类似C#的ArrayList.可扩展的数组,带有一些特定方法   Hashtable类     与C#的类似   Enumeration接口     类似C#的枚举器

  10. java数组集合元素的查找

    java数组和集合的元素查找类似,下面以集合为例. 数组集合元素查找分为两类: 基本查找: 二分折半查找: 基本查找: 两种方式都是for循环来判断,一种通过索引值来判断,一种通过数组索引判断. 索引 ...

随机推荐

  1. Android 修改圆形progressBar颜色

    查了半天资料,没查到怎样修改progressBar的方法,全都是重新写个ProgressBar,其实很简单在只要一句xml里一句化就可以 android:indeterminateTint=" ...

  2. js获取及判断键盘按键的方法

    这篇文章主要介绍了js获取及判断键盘按键的方法,涉及JavaScript键盘事件的获取及键值的判定技巧,具有一定参考借鉴价值,需要的朋友可以参考下   本文实例讲述了js获取及判断键盘按键的方法.分享 ...

  3. JAX-WS @WebParam自定义参数名称无效

    在使用myeclipse 自动对service方法类进行创建webservice服务时,默认创建参数命名都是arg0-9 这样就导致生成的xml配置文件命名不规范,需要对参数名称进行修改: myecl ...

  4. May 2 2017 Week 18 Tuesday

    The beauty of the journey is found in the scenery along the way. 旅行之美在于沿途所见的风景. Several years ago, I ...

  5. UOJ #207. 共价大爷游长沙

    #207. 共价大爷游长沙 链接:http://uoj.ac/problem/207 题意:给一棵树,要求支持加边.删边.询问一条边是否被所有路径覆盖.同时路径端点集合有加入与删除操作. 想法: 考虑 ...

  6. ABAP Netweaver和Hybris Enterprise Commerce Platform的登录认证

    ABAP Netweaver 在我的博客Learn more detail about Standard logon procedure里有详细介绍. Hybris ECP Hybris Admini ...

  7. css3弹性盒子

    CSS3 弹性盒子(Flex Box) 弹性盒子是 CSS3 的一种新的布局模式. CSS3 弹性盒( Flexible Box 或 flexbox),是一种当页面需要适应不同的屏幕大小以及设备类型时 ...

  8. 大数据量高并发的数据库优化详解(MSSQL)

    转载自:http://www.jb51.net/article/71041.htm 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能. ...

  9. POJ-3190 Stall Reservations---优先队列+贪心

    题目链接: https://vjudge.net/problem/POJ-3190 题目大意: 有N头奶牛,每头奶牛都会在[1,1000000]的时间区间内的子区间进行挤奶.挤奶的时候奶牛一定要单独放 ...

  10. 将xml转换成Json,数组,对象格式转换方法

    xml字符串:$simplexml 转换成Json格式:json_encode($simplexml) 转换成数组格式:json_decode(json_encode($simplexml),TRUE ...