当前位置:首页 » 编程语言 » java中map集合

java中map集合

发布时间: 2022-09-18 17:22:43

java题map集合

packagetest;

importjava.io.BufferedWriter;
importjava.io.File;
importjava.io.FileWriter;
importjava.util.HashMap;
importjava.util.Iterator;
importjava.util.Map;
importjava.util.Map.Entry;

publicclassTest{
publicstaticvoidmain(String[]args)throwsException{
//创建一个map集合
Map<String,String>map=newHashMap<String,String>();
//香蕉=5.6;樱桃=25;桃子=5.6苹果=2.3
map.put("香蕉","5.6");
map.put("樱桃","25");
map.put("桃子","5.6");
map.put("苹果","2.3");
System.out.println("map.size="+map.size());

//遍历该map并且统计出有多少种水果Key用两种方法遍历
System.out.println("方法一:begin");
//遍历map中的键
for(Stringkey:map.keySet()){
System.out.println("key="+key);
}
//遍历map中的值
for(Stringvalue:map.values()){
System.out.println("value="+value);
}
System.out.println("方法一:end");
System.out.println("------------");
System.out.println("方法二:begin");
Iterator<Entry<String,String>>it=map.entrySet().iterator();
while(it.hasNext()){
Map.Entry<String,String>entry=(Map.Entry<String,String>)it.next();
System.out.println("key="+entry.getKey()+"value="+entry.getValue());
}
System.out.println("方法二:end");

//将香蕉的价格改为10.9
map.put("香蕉","10.9");
//删除桃子这组数据
map.remove("桃子");

//写入文件
StringfilePath=Test.class.getClass().getResource("/").getPath()+"map.txt";
System.out.println(filePath);
Filef=newFile(filePath);
FileWriterfw=newFileWriter(f);;
BufferedWriterbw=newBufferedWriter(fw);
Iterator<Entry<String,String>>it2=map.entrySet().iterator();
while(it2.hasNext()){
Map.Entry<String,String>entry=(Map.Entry<String,String>)it2.next();
bw.write(entry.getKey()+"="+entry.getValue()+"元");
bw.newLine();
}
bw.flush();
bw.close();
fw.close();
}
}

② Java集合中List和 Map区别

一个是存储单列数据的集合,,另外一个是存储键
和值
这样的双列数的集合,List中存储的数据是有顺序的,并且允许重复。。。Map中存储的数据是没有顺序的,其键是不能重复的,它的值是可以有重复的。。。
List继承
Collection接口
,,Map不继承Collection接口。

③ java中map集合能不能存另两个集合

java中map集合能放另外两个集合,主要是使用map的putall集合,加入另一个集合,如下代码:

importjava.util.HashMap;
importjava.util.Map;

publicclassceshi{

publicstaticvoidmain(String[]args){

Mapmap1=newHashMap();
map1.put("key1","values1");
Mapmap2=newHashMap();
map2.put("key2","values2");

Mapmap3=newHashMap();//将前两个map放入map3中
map3.putAll(map1);//加入map1
map3.putAll(map2);//加入map2
System.out.println(map3);//输出结果
}

}

运行结果如下:

④ java中Map集合如何修改里面的Key值

修改map的key但是不改变该key对应的value值,可以使用
map.put("key2",map.remove("key1"));
比如:
map.put("key1","value1");--此时:key1--value1
map.put("key2",map.remove("key1"));--此时 :key2--value1

⑤ JAVA里面set,map,list的区别是什么(尽量详细)

一、List接口
List是一个继承于Collection的接口,即List是集合中的一种。List是有序的队列,List中的每一个元素都有一个索引;第一个元素的索引值是0,往后的元素的索引值依次+1。和Set不同,List中允许有重复的元素。实现List接口的集合主要有:ArrayList、LinkedList、Vector、Stack。

ArrayList
ArrayList是一个动态数组,也是我们最常用的集合。它允许任何符合规则的元素插入甚至包括null。每一个ArrayList都有一个初始容量:

private static final int DEFAULT_CAPACITY = 10;

随着容器中的元素不断增加,容器的大小也会随着增加。在每次向容器中增加元素的同时都会进行容量检查,当快溢出时,就会进行扩容操作。所以如果我们明确所插入元素的多少,最好指定一个初始容量值,避免过多的进行扩容操作而浪费时间、效率。

size、isEmpty、get、set、iterator 和 listIterator 操作都以固定时间运行。add 操作以分摊的固定时间运行,也就是说,添加 n 个元素需要 O(n) 时间(由于要考虑到扩容,所以这不只是添加元素会带来分摊固定时间开销那样简单)。

ArrayList擅长于随机访问。同时ArrayList是异步的。

LinkedList
同样实现List接口的LinkedList与ArrayList不同,ArrayList是一个动态数组,而LinkedList是一个双向链表。所以它除了有ArrayList的基本操作方法外还额外提供了get,remove,insert方法在LinkedList的首部或尾部。

由于实现的方式不同,LinkedList不能随机访问,它所有的操作都是要按照双重链表的需要执行。在列表中索引的操作将从开头或结尾遍历列表(从靠近指定索引的一端,节约一半时间)。这样做的好处就是可以通过较低的代价在List中进行插入和删除操作。

与ArrayList一样,LinkedList也是异步的。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List:

List list = Collections.synchronizedList(new LinkedList(…));

Vector
与ArrayList相似,但是Vector是同步的。所以说Vector是线程安全的动态数组。它的操作与ArrayList几乎一样。

Stack
Stack继承自Vector,实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。基本的push和pop方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。

二、Set接口
Set是一个继承于Collection的接口,Set是一种不包括重复元素的Collection。它维持它自己的内部排序,所以随机访问没有任何意义。与List一样,它同样运行null的存在但是仅有一个。由于Set接口的特殊性,所有传入Set集合中的元素都必须不同,关于API方面。Set的API和Collection完全一样。实现了Set接口的集合有:HashSet、TreeSet、LinkedHashSet、EnumSet。

HashSet
HashSet堪称查询速度最快的集合,因为其内部是以HashCode来实现的。集合元素可以是null,但只能放入一个null。它内部元素的顺序是由哈希码来决定的,所以它不保证set的迭代顺序;特别是它不保证该顺序恒久不变。

TreeSet
TreeSet是二叉树实现的,基于TreeMap,生成一个总是处于排序状态的set,内部以TreeMap来实现,不允许放入null值。它是使用元素的自然顺序对元素进行排序,或者根据创建Set时提供的 Comparator 进行排序,具体取决于使用的构造方法。

LinkedHashSet
LinkedHashSet集合同样是根据元素的hashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序。这样使得元素看起 来像是以插入顺序保存的,也就是说,当遍历该集合时候,LinkedHashSet将会以元素的添加顺序访问集合的元素。LinkedHashSet在迭代访问Set中的全部元素时,性能比HashSet好,但是插入时性能稍微逊色于HashSet。

三、Map接口
Map与List、Set接口不同,它是由一系列键值对组成的集合,提供了key到Value的映射。在Map中它保证了key与value之间的一一对应关系。也就是说一个key对应一个value,所以它不能存在相同的key值,当然value值可以相同。实现map的集合有:HashMap、HashTable、TreeMap、WeakHashMap。

HashMap
以哈希表数据结构实现,查找对象时通过哈希函数计算其位置,它是为快速查询而设计的,其内部定义了一个hash表数组(Entry[] table),元素会通过哈希转换函数将元素的哈希地址转换成数组中存放的索引,如果有冲突,则使用散列链表的形式将所有相同哈希地址的元素串起来,可能通过查看HashMap.Entry的源码它是一个单链表结构。

HashTable
也是以哈希表数据结构实现的,解决冲突时与HashMap也一样也是采用了散列链表的形式。HashTable继承Dictionary类,实现Map接口。其中Dictionary类是任何可将键映射到相应值的类(如 Hashtable)的抽象父类。每个键和每个值都是一个对象。在任何一个 Dictionary 对象中,每个键至多与一个值相关联。Map是”key-value键值对”接口。 HashTable采用”拉链法”实现哈希表不过性能比HashMap要低。

TreeMap
有序散列表,实现SortedMap接口,底层通过红黑树实现。

WeakHashMap
谈WeakHashMap前先看一下Java中的引用(强度依次递减)

强引用:普遍对象声明的引用,存在便不会GC
软引用:有用但并非必须,发生内存溢出前,二次回收
弱引用:只能生存到下次GC之前,无论是否内存足够
虚引用:唯一目的是在这个对象被GC时能收到一个系统通知
以弱键实现的基于哈希表的Map。在 WeakHashMap 中,当某个键不再正常使用时,将自动移除其条目。更精确地说,对于一个给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为可终止的,被终止,然后被回收。丢弃某个键时,其条目从映射中有效地移除,因此,该类的行为与其他的 Map 实现有所不同。null值和null键都被支持。该类具有与HashMap类相似的性能特征,并具有相同的效能参数初始容量和加载因子。像大多数集合类一样,该类是不同步的。

四、总结
1、List、Set都是继承自Collection接口,Map则不是。

2、List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉,(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的,加入Set 的Object必须定义equals()方法 ,另外list支持for循环,也就是通过下标来遍历,也可以用迭代器,但是set只能用迭代,因为他无序,无法用下标来取得想要的值。)

3、Set和List对比:
Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。
List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。

4、Map适合储存键值对的数据

5、线程安全集合类与非线程安全集合类 :

LinkedList、ArrayList、HashSet是非线程安全的,Vector是线程安全的;
HashMap是非线程安全的,HashTable是线程安全的;
StringBuilder是非线程安全的,StringBuffer是线程安全的。

⑥ 在java的Map集合中,怎样更改value的值

map集合没有专门更改value的方法,更改value的方法就是map.put(key,value),更改就是直接替换,比如想改变key是"1",value是"一"的组合,就是map.put("1","壹"),直接替换就行。

import java.util.HashMap;

public class Demo {

public static void main(String[] args) {

HashMap<String, Integer> map = new HashMap<String, Integer>();

map.put("张三", 89);

map.put("赵四", 100);

System.out.println(map);

if (map.containsKey("张三")) {//判断如果存在 key ,就修改value

map.put("张三", 98);//修改

}

System.out.println("------分割线------");

System.out.println(map);

}

avaMap集合

Map集合没有继承Collection接口,,Map中不能包含相同的key值,每个key只能影射一个相同的value。key值还决定了存储对象在映射中的存储位置。

但不是key对象本身决定的,而是通过散列技术进行处理,可产生一个散列码的整数值,散列码通常用作一个偏移量,该偏移量对应分配给映射的内存区域的起始位置,从而确定存储对象在映射中的存储位置。Map集合包括Map接口以及Map接口所实现的类。

以上内容参考:网络-JavaMap集合

⑦ 在java的Map集合中,怎样更改value的值

map集合没有专门更改value的方法,更改value的方法就是map.put(key,value),更改就是直接替换,比如想改变key是"1",value是"一"的组合,就是map.put("1","壹"),直接替换就行。

import java.util.HashMap;

import java.util.Map;

public class Demo {

public static void main(String[] args) {

Map<Integer,Integer> m = new HashMap<Integer,Integer>();

m.put(1, 1);

print(m);

m.put(1, 2);

print(m);

}

private static void print(Map<Integer, Integer> m) {

for(Map.Entry<Integer, Integer> mm : m.entrySet())

System.out.println("K: "+mm.getKey()+",V: "+mm.getValue());

}

}

(7)java中map集合扩展阅读

集合类有一个共同特点,就是它们只容纳对象(实际上是对象名,即指向地址的指针)。这一点和数组不同,数组可以容纳对象和简单数据。如果在集合类中既想使用简单数据类型,又想利用集合类的灵活性,就可以把简单数据类型数据变成该数据类型类的对象,然后放入集合中处理,但这样执行效率会降低。

集合类容纳的对象都是Object类的实例,一旦把一个对象置入集合类中,它的类信息将丢失,也就是说,集合类中容纳的都是指向Object类对象的指针。

这样的设计是为了使集合类具有通用性,因为Object类是所有类的祖先,所以可以在这些集合中存放任何类而不受限制。当然这也带来了不便,这令使用集合成员之前必须对它重新造型。

集合类是Java数据结构的实现。在编写程序时,经常需要和各种数据打交道,为了处理这些数据而选用数据结构对于程序的运行效率是非常重要的。

⑧ java中map集合用法

Map map=new HashMap();//实例化map对象map.put("key","value");//存放值(值以键(key)-值(value)方式存放。)System.out.print(map.get("key").toString());//取值 根据键就可以取到值

⑨ JAVA里面set,map,list的区别是什么(尽量详细)

java集合的主要分为三种类型:

  • Set(集)

  • List(列表)

  • Map(映射)

  • 要深入理解集合首先要了解下我们熟悉的数组:

    数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),而JAVA集合可以存储和操作数目不固定的一组数据。 所有的JAVA集合都位于 java.util包中! JAVA集合只能存放引用类型的的数据,不能存放基本数据类型。

    简单说下集合和数组的区别:(参考文章:《Thinking In Algorithm》03.数据结构之数组)

Java所有“存储及随机访问一连串对象”的做法,array是最有效率的一种。

1、
效率高,但容量固定且无法动态改变。
array还有一个缺点是,无法判断其中实际存有多少元素,length只是告诉我们array的容量。

2、Java中有一个Arrays类,专门用来操作array。
arrays中拥有一组static函数,
equals():比较两个array是否相等。array拥有相同元素个数,且所有对应元素两两相等。
fill():将值填入array中。
sort():用来对array进行排序。
binarySearch():在排好序的array中寻找元素。
System.array():array的复制。

若撰写程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,array不适用。所以就要用到集合。

那我们开始讨论java中的集合。

集合分类:

Collection:List、Set
Map:HashMap、HashTable

⑩ java中map集合怎么遍历

遍历方法代码如下:

importjava.util.HashMap;
importjava.util.Map;

publicclassApp01{

publicstaticvoidmain(String[]args){

Map<String,String>map1=newHashMap<String,String>();
map1.put("A","ABC");
map1.put("B","BCD");
map1.put("C","CDE");

//遍历
for(Map.Entry<String,String>entry:map1.entrySet()){
System.out.println(entry.getKey()+"->"+entry.getValue());
}
}
}
热点内容
罗布乐思账号密码手机号多少 发布:2025-01-11 18:00:55 浏览:401
在广州什么配置的车才能跑滴滴 发布:2025-01-11 18:00:52 浏览:891
安卓手机哪个生态好 发布:2025-01-11 17:56:01 浏览:272
数据库数据的一致性 发布:2025-01-11 17:30:45 浏览:708
手机怎么设置手势安卓 发布:2025-01-11 17:15:54 浏览:965
威能壁挂炉解压阀 发布:2025-01-11 17:15:53 浏览:560
突破服务器ip限制 发布:2025-01-11 17:11:23 浏览:819
支付宝上传凭证 发布:2025-01-11 17:10:29 浏览:877
怎么打开行李箱的密码锁 发布:2025-01-11 17:09:51 浏览:594
苹果怎么删除id账号和密码 发布:2025-01-11 17:09:50 浏览:785