java:容器/集合(Map(HashMap,TreeMap)Collection和Collections,(Collection-value();)
*Map接口:采用是键值对的方式存放数据。无序
HashMap:
*常见的实现类:
*--HashMap:基于哈希表的 Map 接口的实现。
*常用的构造方法:
* HashMap()构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap。
* HashMap(int initialCapacity) 构造一个带指定初始容量和默认加载因子 (0.75) 的空 HashMap
*常用方法:
* put(K key, V value)在此映射中关联指定值与指定键。
* get(Object key) 返回指定键所映射的值;如果对于该键来说,此映射不包含任何映射关系,则返回 null。
* size() 返回此映射中的键-值映射关系数。
* remove(Object key) 从此映射中移除指定键的映射关系(如果存在)。
* clear() 从此映射中移除所有映射关系。
* containsKey(Object key) 如果此映射包含对于指定键的映射关系,则返回 true。
* containsValue(Object value) 如果此映射将一个或多个键映射到指定值,则返回 true。
*----LinkedHashMap
*--Hashtable
*--TreeMap
import java.util.HashMap;
import java.util.Map; public class TestHashMap {
public static void main(String[] args) {
Map<String,String> map = new HashMap<String,String>();
//向容器中添加元素:以键值对的方式进行存放.
map.put("jack", "成龙");
map.put("jay", "周杰伦");
map.put("eason", "陈奕迅");//添加元素
//取:
// map.remove("eason");//通过key移除元素
System.out.println("是否包含eason:"+map.containsKey("eason"));
System.out.println("是否包含成龙:"+map.containsValue("成龙"));
System.out.println("容器中总共有"+map.size()+"个键值对元素");
String name = map.get("jack");//根据key获取元素的值
System.out.println(name);
String name2 = map.get("jay");
System.out.println(name2); }
}
HashMap取值的两种方法:
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; /**
*Map的遍历
* Set<K> keySet() 返回此映射中所包含的键的 Set 视图。
* Set<Map.Entry<K,V>> entrySet() 返回此映射所包含的映射关系的 Set 视图。
*/
public class TestHashMap2 {
public static void main(String[] args) {
Map<String,String> map = new HashMap<String,String>();
//向容器中添加元素:以键值对的方式进行存放.
map.put("jack", "成龙");
map.put("jay", "周杰伦");
map.put("eason", "陈奕迅");//添加元素
map.put("jack", "杰克");//键如果重复,将发生覆盖
System.out.println(map);
//方式1:先获取键的集合,通过键获取值
Set<String> keySet = map.keySet();
for (String key : keySet) {
String value = map.get(key);
System.out.println(key+"----"+value);
}
System.out.println("-------------------------------");
//方式2:获取键值对的集合,然后从键值对获取键和值。(推荐)
//Entry<String,String>:对键和值进行泛型,Set<Entry<String,String>>对Set集合中Entry(键值对)进行泛型
Set<Entry<String,String>> entrySet = map.entrySet();
for (Entry<String, String> entry : entrySet) {
String key = entry.getKey();//获取键值对的键
String value = entry.getValue();//获取键值对中值
System.out.println(key+"****"+value);
}
}
}
LinkedHashMap继承了HashMap:
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map.Entry;
import java.util.Set; /**
* java.util.LinkedHashMap:哈希表+链表,有序(添加顺序其实就是摆放顺序),继承了HashMap类。
* 常用的构造方法:
* LinkedHashMap()构造一个带默认初始容量 (16) 和加载因子 (0.75) 的空插入顺序 LinkedHashMap 实例
* LinkedHashMap(int initialCapacity) 构造一个带指定初始容量和默认加载因子 (0.75) 的空插入顺序 LinkedHashMap 实例。
* 常用的方法:
* put(K key, V value)在此映射中关联指定值与指定键。
* get(Object key) 返回指定键所映射的值;如果对于该键来说,此映射不包含任何映射关系,则返回 null。
* size() 返回此映射中的键-值映射关系数。
* remove(Object key) 从此映射中移除指定键的映射关系(如果存在)。
* clear() 从此映射中移除所有映射关系。
* containsKey(Object key) 如果此映射包含对于指定键的映射关系,则返回 true。
* containsValue(Object value) 如果此映射将一个或多个键映射到指定值,则返回 true。
* Set<K> keySet() 返回此映射中所包含的键的 Set 视图。
* Set<Map.Entry<K,V>> entrySet() 返回此映射所包含的映射关系的 Set 视图。
*/
public class TestLinkedHashMap {
public static void main(String[] args) {
LinkedHashMap<String, String> map = new LinkedHashMap<String,String>();
map.put("jack", "成龙");
map.put("jay", "周杰伦");
map.put("eason", "陈奕迅");//添加元素
//方式1:通过先遍历键的集合获取键,然后通过键获取值
Set<String> keySet = map.keySet();
for (String key : keySet) {
String value = map.get(key);
System.out.println(key+"-----"+value);
}
//方式2:通过先遍历键值对的集合获取键值对,然后通过键值对获取键和值。
// Set<Entry<String,String>> entrySet = map.entrySet();
// for (Entry<String, String> entry : entrySet) {
// System.out.println(entry.getKey()+"==="+entry.getValue());
// }
for(Iterator<Entry<String,String>> iter = map.entrySet().iterator();iter.hasNext();){
Entry<String,String> entry = iter.next();
System.out.println(entry.getKey()+"==="+entry.getValue());
}
}
}
TreeMap:
*TreeMap:类似于TreeSet,采用二叉树的方式存储数据,有序(大小顺序)。
*常用的构造函数:
*TreeMap() 使用键的自然顺序构造一个新的、空的树映射。 插入该映射的所有键都必须实现 Comparable 接口.
*TreeMap(Comparator<? super K> comparator) 构造一个新的、空的树映射,该映射根据给定比较器进行排序。
(对象放前面,值放后面)
public class TestTreeMap {
public static void main(String[] args) {
TreeMap<String,String> map = new TreeMap<String,String>();
map.put("a","aaa");
map.put("c","ccc");
map.put("b","bbb");
System.out.println(map);
System.out.println("------------");
TreeMap<Student,String> map2 = new TreeMap<Student,String>();
Student stu1 = new Student("zhangsan",);
Student stu2 = new Student("lisi",);
Student stu3 = new Student("wangwu",);
map2.put(stu1,"zhangsan");
map2.put(stu2,"lisi");
map2.put(stu3,"wangwu");
System.out.println(map2);
}
}
*TreeMap(Comparator<? super K> comparator) 构造一个新的、空的树映射,该映射根据给定比较器进行排序。
import java.util.Comparator; public class AgeComparator implements Comparator<Student> { @Override
public int compare(Student o1, Student o2) {
return -(o1.getAge()-o2.getAge());
} }
public class TestTreeMap2 {
public static void main(String[] args) {
TreeMap<Student,String> map = new TreeMap<Student,String>(new AgeComparator());
Student stu1 = new Student("zhangsan",);
Student stu2 = new Student("lisi",);
Student stu3 = new Student("wangwu",);
map.put(stu1,"zhangsan");
map.put(stu2,"lisi");
map.put(stu3,"wangwu");
System.out.println(map);
}
}
* Collection和Collections的区别:
* Collection是List和Set的父接口,而Collections是操作Collection集合的工具类。
* Collections(对Collection集合进行操作的工具类),类似Arrays类(对数组进行操作的工具类),提供了若干个静态的方法以方便操作集合。
* 常用的方法:
* addAll(Collection<? super T> c, T... elements) 将所有指定元素添加到指定 collection 中。
* sort(List<T> list) 根据元素的自然顺序 对指定列表按升序进行排序。
* reverse(List<?> list)反转指定列表中元素的顺序。
* max(Collection<? extends T> coll) 根据元素的自然顺序,返回给定 collection 的最大元素。
* min(Collection<? extends T> coll) 根据元素的自然顺序 返回给定 collection 的最小元素。
* binarySearch(List<? extends Comparable<? super T>> list, T key)
* 使用二分搜索法搜索指定列表,以获得指定对象,必须根据列表元素的自然顺序对列表进行升序排序
import java.util.ArrayList;
import java.util.Collections;
import java.util.List; public class TestCollections {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
list.add();
list.add();
list.add();
list.add();
list.add();
System.out.println("排序前:"+list);
Collections.sort(list);//排序,默认按照升序进行排列
System.out.println("排序后:"+list);
Collections.reverse(list);//反转:倒序输出
System.out.println("反转后:"+list);
int index = Collections.binarySearch(list, );//二分查找:待查找的集合中元素必须有大小顺序 System.out.println("index="+index);
Integer max = Collections.max(list);
System.out.println("max="+max);
Integer min = Collections.min(list);
System.out.println("min="+min);
}
}
Collection-value();
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set; /**
*3、定义一个Worker类,属性:name:String,age:int,salary:double
a).把若干Worker对象放在List中,排序并遍历输出,按照age升序排列
b).把若干Worker对象放在Set中并遍历,要求没有重复元素
c).把若干Worker对象放在Map中并按照三种方式分别遍历,要求以Worker的姓名作为key。
*
*/
public class Homework3 {
//1.把若干Worker对象放在List中,排序并遍历输出,按照age升序排列
public void saveAsList(){
List<Worker> list = new ArrayList<Worker>();
Worker w1 = new Worker("zhangsan",,);
Worker w2 = new Worker("lisi",,);
Worker w3 = new Worker("wangwu",,);
list.add(w1);
list.add(w2);
list.add(w3);
Collections.sort(list,new AgeComparator());//排序
for (Worker worker : list) {
System.out.println(worker.getName()+"---"+worker.getAge()+"---"+worker.getSalary());
}
} //2.把若干Worker对象放在Set中并遍历,要求没有重复元素
public void saveAsSet(){
Set<Worker> set = new HashSet<Worker>();
Worker w1 = new Worker("zhangsan",,);
Worker w2 = new Worker("lisi",,);
Worker w3 = new Worker("wangwu",,);
Worker w4 = new Worker("wangwu",,);
set.add(w1);
set.add(w2);
set.add(w3);
set.add(w4);
//遍历Set
for (Worker worker : set) {
System.out.println(worker.getName()+"---"+worker.getAge()+"---"+worker.getSalary());
} } //3.把若干Worker对象放在Map中并按照三种方式分别遍历,要求以Worker的姓名作为key。
public void saveAsMap(){
Map<String,Worker> map = new HashMap<String,Worker>();
Worker w1 = new Worker("zhangsan",,);
Worker w2 = new Worker("lisi",,);
Worker w3 = new Worker("wangwu",,);
map.put(w1.getName(), w1);
map.put(w2.getName(), w2);
map.put(w3.getName(), w3);
System.out.println("第一种遍历:");
Set<String> keySet = map.keySet();
for (String key : keySet) {
Worker worker = map.get(key);
System.out.println(worker.getName()+"---"+worker.getAge()+"---"+worker.getSalary());
}
System.out.println("第二种遍历:");
Set<Entry<String,Worker>> entrySet = map.entrySet();
for (Entry<String, Worker> entry : entrySet) {
Worker worker = entry.getValue();
System.out.println(worker.getName()+"---"+worker.getAge()+"---"+worker.getSalary());
}
System.out.println("第三种遍历:");
Collection<Worker> values = map.values();//获取值的集合
for (Worker worker : values) {
System.out.println(worker.getName()+"---"+worker.getAge()+"---"+worker.getSalary());
}
} public static void main(String[] args) {
Homework3 homework3 = new Homework3();
// homework3.saveAsList();
// homework3.saveAsSet();
homework3.saveAsMap();
}
}
java:容器/集合(Map(HashMap,TreeMap)Collection和Collections,(Collection-value();)的更多相关文章
- (7)Java数据结构--集合map,set,list详解
MAP,SET,LIST,等JAVA中集合解析(了解) - clam_clam的专栏 - CSDN博---有颜色, http://blog.csdn.net/clam_clam/article/det ...
- 【Java心得总结七】Java容器下——Map
我将容器类库自己平时编程及看书的感受总结成了三篇博文,前两篇分别是:[Java心得总结五]Java容器上——容器初探和[Java心得总结六]Java容器中——Collection,第一篇从宏观整体的角 ...
- java容器---集合总结
思考为什么要引入容器这个概念? Java有多种方式保存对象(应该是对象的引用),例如使用数组时保存一组对象中的最有效的方式,如果你想保存一组基本类型的数据,也推荐使用这种方式,但大家知道数组是具有固定 ...
- java容器集合
java 集合分为 Collection 和 Map 两大类 Collection 是 Java 集合框架的顶层接口,它是对容器类进行增.删.改.查的定义,同时继承了 Iterable 接口,具有对集 ...
- java 容器 集合 用法
Set,List,Map,Vector,ArrayList的区别 JAVA的容器---List,Map,Set Collection ├List │├LinkedList │├ArrayList │└ ...
- Java自学-集合框架 HashMap
Java集合框架 HashMap 示例 1 : HashMap的键值对 HashMap储存数据的方式是-- 键值对 package collection; import java.util.HashM ...
- Java之集合(十二)TreeMap
转载请注明源出处:http://www.cnblogs.com/lighten/p/7411935.html 1.前言 本章介绍Map体系中的TreeMap,顾名思义,这个是一个树结构的Map.Tre ...
- java基础(20):Map、可变参数、Collections
1. Map接口 1.1 Map接口概述 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图. Collection中的集合,元素是孤 ...
- [Java核心技术]第九章-集合(映射-HashMap&TreeMap)
HashMap 基本操作 HashMap<Integer,Integer> firstAccurMap=new HashMap<Integer,Integer>(); firs ...
- Java容器:Map
1. Map概述 1.1. Map类的继承关系 1.2. 几个Map接口类概念 1.3. Map类的通用方法 2. HashMap 2.1. 构造函数 2.2. 数据结构 2.3. 存储实现 3. H ...
随机推荐
- 【bzoj 4318】OSU!
题意 一个长度为 $n$ 的字符串,第 $i$ 位有 $p_i$ 的概率是 $1$,否则是 $0$.一个字符串的分数定义为:对于字符串中每一个极长的连续一段 $1$,设这段 $1$ 的长度为 $x$, ...
- 前端面试题-clearfix(清除浮动)
一.浮动的概念 浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止.由于浮动框不在文档的普通流中,所以文档的普通流中的块框表现得就像浮动框不存在一样. 二.浮动的影响 1. ...
- **JAVA参数传递方式 (按值传递与引用传递区别)
https://blog.csdn.net/q5706503/article/details/82910428public class TestMain { public static void ma ...
- 使用nfs制作动态分配存储卷
参考文献:https://yq.aliyun.com/articles/613036 相对于静态存储, 动态存储的优势: ● 管理员无需预先创建大量的PV作为存储资源; ● 静态存储需要用户申请PVC ...
- myleecode
目录 # myleecode 1.冒泡排序 2.快速排序 3.进度条打印 4.打印 九九乘法表 5.打印 金字塔 6.接雨滴 7.一行代码实现1-100个数相加 8.如何在不使用内置方法强制转换的情况 ...
- python selenium 执行完毕关闭chromedriver进程
#OS是我们操作dos系统时需要引入的库 import os #杀死这个chromedriver进程,因为每次启动都会打开,所以需要kill,这里用的chrome浏览器,打开方式时chromedriv ...
- C# 两个进程之间通讯(管道通信 )
#region 客户端 NamedPipeClientStream pipeClient = new NamedPipeClientStream("localh ...
- 51 Nod 1073 约瑟夫环
1073 约瑟夫环 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 N个人坐成一个圆环(编号为1 - N),从第1个人开始报数,数到K的人出列,后面的人 ...
- 哈密尔顿环x
欧拉回路是指不重复地走过所有路径的回路,而哈密尔顿环是指不重复地走过所有的点,并且最后还能回到起点的回路. 代码如下: #include<iostream> #include<cs ...
- Moco 详解
一.下载及安装: 运行环境: JAVA环境 linux 下载地址:https://github.com/dreamhead/moco 下载下来的是一个jar包,如:moco-runner-0.12.0 ...