java基础 Map集合

                              集合

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

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

List 有序  可重复的

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

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

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

Set 无序 不能重复

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

Arraylist 和 linked list 区别

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

Map   是java。Util包中的另一个接口,它是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()两种方法来取 key和value。返回的是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, 查找一个指定数据或者频繁的访问数据 这个时候Vector与arraylist都可以  Vector

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

Arraylist 和 linkedlist

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

2,    对于随机访问get和set,Arraylist觉得优于linkedlist,因为linkedlist要移动指针

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

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

Hashmap与treemap

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

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

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

测试:

在hashmap中,同样的值map顺序不同,equals时 false;

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

Hashtable线程与hashmap

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

2, Hashmap允许存在一个为nulll的key,多个为null的value

3, Hashtable的key和value都不允许为null;

原文地址:https://www.cnblogs.com/0307lmy/p/11509958.html

时间: 2024-10-13 11:21:17

java基础 Map集合的相关文章

黑马程序员——黑马基础——Map,集合框架工具类Conlections和Arrays

黑马程序员--黑马基础--Map,集合框架工具类Conlections和Arrays ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一,Map集合 Map<K,V>集合是一个接口,和List集合及Set集合不同的是,它是双列集合,并且可以给对象加上名字,即键(Key). 特点: 1)该集合存储键值对,一对一对往里存 2)要保证键的唯一性. Map集合的子类 Map |--Hashtable:底层是哈希表数据结构,不可以存入null键nu

UVA 814 The Letter Carrier&#39;s Rounds(JAVA基础map)

题解:就是按照题目模拟就好 但是这个题目让我发现了我Java里面许多问题 具体看代码,但是还是分为这几个方面 属性的作用域问题,缓冲区问题,map与list映射的问题,输出多个空格不一定是/t,反转思想代码优化 import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Sc

java基础之集合Set

1.集合 当向集合Set中增加对象时,首先集合计算要增加对象的hashcode,根据该值得到一个位置用来存放当前的对象,当在该位置没有一个对象存在的时候,集合set认为该对象在集合中不存在,直接增加进去.如果在该位置有一个对象存在,接着将准备增加到集合中的的对象与该位置上的对象进行equals比较,若返回false,在进行一次散列,将该对象放到散列后计算出的新地址.若返回true,不会再将该对象增加到集合中 2.当重写equals方法时,必须要重写hashcode方法 如果一个类的两个对象,使用

java基础之集合List-ArrayList、LinkedList、Vector的区别

PS:本篇博客主要参考jdk的底层源码,而非自己动手写代码. 请问ArrayList.LinkedList.Vector的区别 ①ArrayList底层实际上是采用数组实现的(并且该数组的类型的Object类型的) ②如果jdk6,采用Array.copyOf()方法来生成一个新的数组,如果是jdk5,采用的是System.arraycopy()方法(当添加的数据量大于数组的长度时候) ③List list = newArrayList()时,底层会生成一个长度为10的数组来存放对象 ④Arra

黑马程序员——java基础 ArrayList集合基本方法演示

java基础 ArrayList集合基本方法演示 import java.util.ArrayList; import java.util.Iterator; public class ArrayListDemos { public static void main(String[] args) { // 创建一个新的容器 ArrayList al = new ArrayList(); al.add("abc1"); al.add("abc2"); al.add(&

Java基础之 集合体系结构(Collection、List、ArrayList、LinkedList、Vector)

Java基础之 集合体系结构详细笔记(Collection.List.ArrayList.LinkedList.Vector) 集合是JavaSE的重要组成部分,其与数据结构的知识密切相联,集合体系就是对数据结构的封装 数组与集合的比较 数组:长度固定,可以存储基本数据类型,也能存储对象 集合:长度可变,只能存储对象类型(由于有包装类的存在,集合可以存储任何类型) 集合的体系结构 集合也叫容器,用于存储对象 我们根据不同的需求和不同的数据结构来对集合做了不同的抽象 Collection接口-公共

JAVA基础学习-集合三-Map、HashMap,TreeMap与常用API

一.Map简述 1.1.简述 public interface Map<K,V> 类型参数: K - 此映射所维护的键的类型 key V - 映射值的类型 value 该集合提供键--值的映射.key不能重复,一对对的存储方式 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值. 1.2.方法 嵌套类摘要 static interface Map.Entry<K,V> 映射项(键-值对). 方法摘要 void clear() 从此映射中移除所有映射关系(可选操

Java基础Map

LinkedHashMap类概述 Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序. import java.util.LinkedHashMap; import java.util.Set;   /*  * LinkedHashMap:是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序.  * 由哈希表保证键的唯一性  * 由链表保证键盘的有序(存储和取出的顺序一致)  */ public class LinkedHashMapDemo { public static void 

java基础系列--集合类库(一)

原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/7229478.html 1.概述 Java的集合类库很是丰富,囊括了大部分的常见数据结构形式,让我们可以有目的性的选择适合当前业务场景和功能场景的集合类.合适的集合框架可以最大程度的提升执行速度和效率. Java集合类库中所有的集合类都始于Collection接口和Map接口,前者表示单值集合,后者表示映射集合(双值集合). Java集合框架中的Abstract开头的抽象类,其实是JDK开