java基础 Map集合

2019-09-17 10:30:58来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

java基础 Map集合

                              集合

 

集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下

 

Collection接口是集合的根接口,没有蹄冻这个接口的直接实现类,但是却又其让其被继承的长   生的两个接口就是setlist Set中不能包含重复的元素。List是一个有序的集合

 

List 有序  可重复的

List里存放的对象是有序的,同时也是可以重复的,list

关注的是索引,拥有一系列和索引相关的方法,查询速度快

因为是会伴随这后面数据的移动,所有插入删除数据速度慢

 

Set 无序 不能重复

Set是无序的 不能重复的,集合中的对象不按特定的方式排序,只是简单的把对象加入 集合中

 

Arraylist linked list 区别

 

Arraylistlinkedlist在用法上没有区别,但是在功能上还是有区别的,linkedlist经常用 在增删操作较多而查询很少的情况下,arraylist则相反

 

Map   javaUtil包中的另一个接口,它是collection接口没有关系,是互相独立的,但是都属于集合的一部分。Map包含了Key-value对,map不能包含重复的key,但是可以包含相同的value

 

Map 键值对 建唯一  值不唯一

Map集合中存储的是键值对,建不能重复,值可以重复,根据建得到值,对map集合遍历时先得到建的set集合,对set集合进行遍历,得到相应的值

 

Map集合

实现类:HashMap   Hashtable  LinkedHashMao TreeMap

 

  HashMap

HashMap类是最常见的map集合,他是根据建得HashCode存储数据的,根据建可以直 获取它的值,具有很快的访问速度,在遍历的时候,获取数据的顺序是完全随机的,因 为建不可以重复,所以HashMap最多只允许一条记录为mull,允许多条记录的值为Null

是不同步的

  Hashtable

Hashtable HashMap类似,是HashMap的线程安全版,他支持线程的同步,即任意 时刻只有一个线程写Hashtable,因此也导致了Hashtable在写入的时候会比较慢,他继 承自Dictionary类,不同的是它不允许记录的键或者值为null,同时效率较低。

  ConcurrentHashMap

线程安全的,并且是锁分离。ConcurrentHashMap 内部使用段(Segment)来表示这些 不同的部分,每个段其实就是一个小时的hash  table 他们有自己的锁,只要修改多个 操作发生在不同的段上,他们就可以并发进行。

  LinkedHashMap  

LinkedHashMap保存了记录的插入顺序,用在lteraor遍历linkedHash

Map时先得到记录肯定是先插入的,在比遍历的时候会比HashMap慢,有HashMap 全部特征。

  TreeMap

TreeMap实现SortMap接口,能狗把他保存的记录根据建排序,默认是按键值的升序 序(自然排序),也可以指定排序的比较器,当用lierator 遍历TreeMap,得到的记录时 排过序的,不允许key值为空

Map的遍历

 

KeySet()

map中所有的建存入set集合中,,因为set

具备迭代器,所有可以迭代方式取出所有的建,再根据get方法,获取每一个建对应的 值。Keyset();迭代后只能通过gat()获取key

     取到的结果会乱序,因为取得数据行主键的时候,使用了HashMap.keyset()方法,而这 个防范返回的set结果,里面的数据是乱序排放的。

用法:

Map  map  = new HashMap();

Map.put(“key1” , ”lisi1”);

Map.put(“key2” , ”lisi2”);

Map.put(“key3” , ”lisi3”);

Map.put(“key4” , ”lisi4”);

//先获取mao集合的所有键的set集合,keyset()

Lterator it  =  map.keyset().iterator();

//获取迭代器

While(it.hasNext()){

  Object key =it.next();

  System.out.println(map.get(key));

}

    entrySet()

Set<Map.Entry<K,V>>entrySet()  //返回此映射中包含的映射关系的set视图。(一个关系 就是一个建-值对),就是把(key-value)作为一个整体一对一地存放到set集合中。 Map.entry表示映射关系。Entryset(); 迭代后可以e.getKey(). e.getValur()两种方法来取 keyvalue。返回的是entry接口;

   用法:

Map  map  = new HashMap();

Map.put(“key1” , ”lisi1”);

Map.put(“key2” , ”lisi2”);

Map.put(“key3” , ”lisi3”);

Map.put(“key4” , ”lisi4”);

        //map集合中的映射关系取出,存入到set集合

           Lterator it = map.entrySet().iterator();

      While(it.hasNext){

Entry e = (Entry)it.next();

System.out.println(“键”+e.gatKey()+”的值为”+e.getValue);

}

    推荐使用第二种方法,及entryset()方法,效率高。

 Lterator 类所有的集合类,都实现了lterator接口,这是一个用于遍历集合中的接口,在只要包   含下面的三种方法

HasNext()是否还有下一个元素。

Next() 放回下一个元素

Remove() 删除当前元素

Lteror:迭代输出,时使用最多的输出方式。

Listiterator lterator的子接口,专门用于输出list中的内容。

Foreach输出,jdk1.5之后提供的新功能,可以输出数组或集合。

 

 

Vector ArrayList

1, Vector是线程同步的,所有他是安全的,而arraylist是线程异步的,是不安全的 如果我  们不考虑到这个线程安全的因素的问题的话,一般用arraylist效率比较高

2, 如果考虑到集合中的元素的数目大于目前聚合数组的长度时,vector增长率为目前数组 长度的100%而arraylist增长率为目前数组长度的50%,如果在集合中使用数据量比较 大的数据,用vector有一定的优势。

3, 查找一个指定数据或者频繁的访问数据 这个时候Vectorarraylist都可以  Vector

  使用了synchronized方法 线程安全,所以性能上要比arraylist要差,linkedlist使用双向 链表实现存储,所以插入数据比较快

     

Arraylist linkedlist

1,    Arraylist是实现了基于鼎泰数组的数据结构,linkedlist是基于链表的数据结构

2,    对于随机访问getsetArraylist觉得优于linkedlist,因为linkedlist要移动指针

3,    对于新增和删除操作addremovelinedlistbi'jiao比较占优势,因为arraylist要移动数 据,这一点要看实际情况,若只对单条数据插入或删除,arraylist的速度而优于linkedlist

但若是批量随机的插入删除数据,linkedlist的速度要大于arraylist每插入一条数据要移 动插入点及之后的所有数据

 

Hashmaptreemap

1, Hashmap通过hashcode对其内容进行快速查找,而treemap中所有的元素都保持这某种 固定的顺序,如果你需要得到一个有序的就应该使用treemaphashmap是无序的

2, map中插入,删除和定位元素,hashmap是最好的选择,但如果您要按自然顺序或自 定义顺序遍历键,那么treemap会更好,使用hashmap要求添加的键类声明确定定义了 hashcode()equals();

3, 两个map中的元素一样,但是顺序不一样,导致hashcode()不一样。

测试:

hashmap中,同样的值map顺序不同,equalsfalse

treemap中,同样的值map,顺序不同,equals时,true,说明,treemapequals() 时时整理了顺序了的。

 

Hashtable线程与hashmap

1, 同步性:hashtable时线程安全的,也就是说时同步的,而hashmap是线程不安全的,不 是同步的。

2, Hashmap允许存在一个为nulllkey,多个为nullvalue

3, Hashtablekeyvalue都不允许为null;


原文链接:https://www.cnblogs.com/0307lmy/p/11509958.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:作为Java开发人员不会饿死的5个理由

下一篇:Docker搭建disconf环境,三部曲之一:极速搭建disconf