集合里的Map接口
Map接口:双列数据,保存具有映射关系的"key-value"的集合(用于一对一对的数据)
HashMap:是map的主要实现类,线程不安全,效率高
Hashtable:是一个古老的map实现类.jdk1.0就有了,线程安全的,效率低
这两者的实现原理和功能都相同
TreeMap:实现自然排序和定制排序
LinkedHashMap:实现按输入的顺序方式输出
map常用方法:
-
1.添加
Object put(Object key,Object value);向集合去添加"key-value" key不允许重复
-
2.添加多个元素
void putAll(Map map); 向当前集合中添加map集合中所有的元素
-
3.删除
Object remove(Object key) 删除指定的key对应key-value元素,并返回value Object remove(Object key,Object value) 删除指定的key-value元素,并返回boolean值判断是否删除成功
-
4.修改
可以通过put修改对应key的value值
-
5.元素的查询
Object get(Object key)获取指定key对应的value
package SE.day0304;
import java.util.HashMap;
import java.util.Map;
public class MapDemo01 {
public static void main(String[] args) {
/*
map常用方法:
1.添加
Object put(Object key,Object value);
向集合去添加"key-value" key不允许重复
2.添加多个元素
void putAll(Map map);
向当前集合中添加map集合中所有的元素
3.删除
Object remove(Object key) 删除指定的key对应key-value元素,并返回value
Object remove(Object key,Object value)
删除指定的key-value元素,并返回boolean值判断是否删除成功
4.修改
可以通过put修改对应key的value值
5.元素的查询
Object get(Object key)获取指定key对应的value
*/
Map map1=new HashMap();
map1.put("皮卡丘",20);
map1.put("皮卡丘",18);//key相同,此时的value覆盖掉原来的key的value
map1.put("妙蛙种子",18);
System.out.println(map1);
Map map2=new HashMap();
map2.put("杰尼龟",20);
map2.putAll(map1);
System.out.println(map1.get("皮卡丘"));
/*
//删除key值相同的元素,并返回value
System.out.println(map2.remove("皮卡丘"));
//删除key-value相同的元素,并返回boolean值
System.out.println(map2.remove("杰尼龟", 20));
*/
}
}
-
6.获取map集合的key或者value
获取key: Set keySet();返回map集合中所有的key(key不可重复) 获取value: Collection values();返回map集合中所有的value(value可重复可不重复) 获取key-value: Set entrySet();返回集合所有的key-value的键值对
package SE.day0304;
import java.util.Collection;
import java.util.HashMap;
import java.util.Set;
public class MapDemo02 {
public static void main(String[] args) {
HashMap hm=new HashMap();
hm.put("皮卡丘",10);
hm.put("喷火龙",15);
hm.put("杰尼龟",13);
Set s=hm.keySet();
for (Object o:s) {
System.out.println(o);
}
Collection c=hm.values();
for (Object o: c) {
System.out.println(o);
}
Set s1=hm.entrySet();
for(Object o:s1){
System.out.println(o);
}
}
}
-
底层结构: 1.JDK7:hashMap底层采用的是数组 链表 底层创建数组 2.JDK8:hashMap底层采用的是数组 链表 红黑树 底层添加元素的时候在创建数组 hashMap: 当hashMap中添加元素超过了数量大小的0.75倍,自动扩容为原来的2倍 HashMap有个子类叫LinkedHashMap;底层维护一个链表,用来使集合看起来是按照插入顺序存储的
package SE.day0304;
import java.util.HashMap;
public class HashMapDemo {
public static void main(String[] args) {
HashMap hm=new HashMap();
hm.put("皮卡丘",10);
hm.put("喷火龙",15);
/*
先调用"皮卡丘"所在hashCode方法,计算出hash的值
此时hash值金国某种特定的算法,计算出在数组中存放的位置
如果指定位置没有元素,"皮卡丘",16添加成功
如果指定位置有元素,那就去比较两个key所得类的hash值
如果hash值相同,比较两个对象的equals方法
如果equals比较方法返回
false,添加成功
true,则使用当前对象的key的value去替换原来的value
如果hash值不相同,则"皮卡丘"添加成功
*/
}
}
-
Hashtable是一个古老的map实现类,JDK1.0就有了,不同于HashMap
Hashtable是线程安全的,效率低 Hashtable与HashMap实现原理与功能相同,底层都是使用哈希标结构,查询速度会快一些 可以互相使用,但是Hashtable中不可以使null作为key和value,HashMap可以 Properties作为Hashtable的子类,该类的对象用于处理属性文件 由于属性文件里面的key和value都是String类型的,所以 key value name=root pwd=123456 url=jdbc:mysql
package SE.day0304;
import java.io.FileInputStream;
import java.util.Properties;
/*
Hashtable是一个古老的map实现类,JDK1.0就有了,不同于HashMap
Hashtable是线程安全的,效率低
Hashtable与HashMap实现原理与功能相同,底层都是使用哈希标结构,查询速度会快一些
可以互相使用,但是Hashtable中不可以使null作为key和value,HashMap可以
Properties作为Hashtable的子类,该类的对象用于处理属性文件
由于属性文件里面的key和value都是String类型的,所以
key value
name=root
pwd=123456
url=jdbc:mysql
*/
public class HashtableDemo01 {
public static void main(String[] args) throws Exception {
//事先在同一个项目里面创建一个jdbc.properties文件
//使用输入流读取指定的配置文件中的内容
FileInputStream fis=new FileInputStream("jdbc.properties");
//创建Properties对象用来都读配置文件
Properties p=new Properties();
//使用Properties对象加载指定的配置文件
p.load(fis);
String username=p.getProperty("username");
String password=p.getProperty("password");
System.out.println(username "=" password);
}
}
向指定文件写内容
package SE.day0304;
import java.io.FileOutputStream;
import java.util.Properties;
public class HashtableDemo02 {
public static void main(String[] args) throws Exception {
//给指定的文件创建输出流
FileOutputStream f=new FileOutputStream("jdbc.properties");
//创建Properties对象
Properties p=new Properties();
//先设置key和value
p.setProperty("url","jdbc");
p.setProperty("username","root");
//将设置key和value写到文件中
p.store(f,"hashtable");
}
}
自然排序
package SE.day0304;
import java.util.TreeMap;
public class TreeMapDemo {
public static void main(String[] args) {
TreeMap treeMap=new TreeMap();
treeMap.put("444",10);
treeMap.put("555",10);
treeMap.put("111",10);
treeMap.put("666",10);
System.out.println(treeMap);
TreeMap tm2=new TreeMap();
tm2.put(new User(20,"444",20),60);
tm2.put(new User(2,"666",19),50);
tm2.put(new User(6,"888",20),80);
System.out.println(tm2);
}
}
class User implements Comparable{
int id;
String name;
int age;
public User(int id, String name, int age) {
this.name = name;
this.age = age;
this.id = id;
}
@Override
public int compareTo(Object o) {
if (o instanceof User){
User u=(User)o;
//return Integer.compare(this.id,u.id);id升序
return this.name.compareTo(u.name);//名字升序
}else{
throw new RuntimeException("类型不匹配");
}
}
@Override
public String toString() {
return "User{"
"id=" id
", name='" name '\''
", age=" age
'}';
}
}
效果图如下:
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgejhei
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01