什么是Map类型的集合
介绍
1.用于保存具有映射关系的数据(key——value)。
2.Map中的key和value可以是任意的类型的数据。
3.Map中的key值不允许重复。
4.Map中的value值可以重复。
5.一般常用string作为value的key。
6.key和value之间存在一一对应的关系。
7.hashmap没有实现线程同步,因此线程是不安全的。
8.底层是由数组+链表+红黑树实现。
常用的方法
1.put()添加元素
2.remove()删除元素
3.get()根据键值获取值。
4.size()获取map中的元素个数。
5.isEmpty()map集合是否为空。
6.clear()清除map集合。
7.containKey()查看key是否存在。
如下例子
import java.util.*;
public class Main {
public static void main(String[] args) {
// 创建一个hashmap
HashMap<Object, Object> map = new HashMap<>();
// 放入元素。
map.put("note1",4);
map.put(1,"puting element");
map.put(23.44,"dog");
System.out.println(map);
// 删除key值为1的数据。
map.remove(1);
System.out.println(map);
// 获取key值为note1的值。
System.out.println(map.get("note1"));
// 获取map集合的元素个数
System.out.println(map.size());
// 判断集合是否为空
System.out.println(map.isEmpty());
// key值是否存在
System.out.println(map.containsKey("note1"));
// value值是否存在
System.out.println(map.containsValue("dog"));
// 清空map集合
map.clear();
System.out.println(map);
}
}
遍历map集合
遍历方式1:通过key来得到值。
import java.util.*;
public class Main {
public static void main(String[] args) {
// 创建一个hashmap
HashMap<Object, Object> map = new HashMap<>();
// 放入元素。
map.put("note1",4);
map.put(1,"puting element");
map.put(23.44,"dog");
// 得到所有的key
Set keyset = map.keySet();
// 遍历key对应的值,并且将值取出来。
for(Object obj : keyset)
{
System.out.println(obj+":"+map.get(obj));
}
}
}
通过得到迭代器的方式输出。
import java.util.*;
public class Main {
public static void main(String[] args) {
// 创建一个hashmap
HashMap<Object, Object> map = new HashMap<>();
// 放入元素。
map.put("note1",4);
map.put(1,"puting element");
map.put(23.44,"dog");
// 得到map集合中的keyset
Set keyset = map.keySet();
// 得到keyset的迭代器
Iterator it = keyset.iterator();
// it是否还有下一个元素
while (it.hasNext())
{
// 得到这个key值
Object obj = it.next();
// 输出这个key和这个key对应的值;
System.out.println(obj+":"+map.get(obj));
}
}
}
例子2:直接得到collection并且遍历输出。
import java.util.*;
public class Main {
public static void main(String[] args) {
// 创建一个hashmap
HashMap<Object, Object> map = new HashMap<>();
// 放入元素。
map.put("note1",4);
map.put(1,"puting element");
map.put(23.44,"dog");
// 直接得到map中的values
Collection collection = map.values();
// 直接遍历输出
for (Object obj : collection)
{
System.out.println(obj);
}
}
}
通过得到迭代器的方式遍历collection
import java.util.*;
public class Main {
public static void main(String[] args) {
// 创建一个hashmap
HashMap<Object, Object> map = new HashMap<>();
// 放入元素。
map.put("note1",4);
map.put(1,"puting element");
map.put(23.44,"dog");
// 直接得到map中的values
Collection collection = map.values();
// 得到collection的迭代器
Iterator iterator = collection.iterator();
//判断是否达到迭代器的末尾
while (iterator.hasNext())
{
// 输出并且指向下一个位置。
System.out.println(iterator.next());
}
}
}
例子3:得到entrySet来遍历map
import java.util.*;
public class Main {
public static void main(String[] args) {
// 创建一个hashmap
HashMap<Object, Object> map = new HashMap<>();
// 放入元素。
map.put("note1", 4);
map.put(1, "puting element");
map.put(23.44, "dog");
// 直接得到map中的entrySet
Set entrySet = map.entrySet();
// 遍历输出。
for (Object obj : entrySet)
{
System.out.println(obj);
}
}
}
迭代器方式
import java.util.*;
public class Main {
public static void main(String[] args) {
// 创建一个hashmap
HashMap<Object, Object> map = new HashMap<>();
// 放入元素。
map.put("note1", 4);
map.put(1, "puting element");
map.put(23.44, "dog");
// 直接得到map中的entrySet
Set entrySet = map.entrySet();
// 得到迭代器
Iterator it = entrySet.iterator();
// 判断是否有下一个
while (it.hasNext())
{
// 有就输出
System.out.println(it.next());
}
// 没有就结束
}
}
这里有个例子
import java.lang.reflect.MalformedParameterizedTypeException;
import java.net.CookieHandler;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
public class Main {
public static void main(String[] args) {
// 得到map集合
Map map = new HashMap();
// put元素
map.put(1,new Employee("Phonex",44444,1));
map.put(2,new Employee("Schante",23342,2));
map.put(3,new Employee("Eelemta",233,3));
// 遍历输出
// 得到value collection
Collection collection= map.values();
// 遍历输出。
for(Object obj:collection)
{
Employee employee = (Employee) obj;
System.out.println(employee);
}
// 这里输出工资打印5000的员工
// 得到map entrySet
collection = map.entrySet();
// collection的迭代器
Iterator iterator = collection.iterator();
// 遍历迭代器
while (iterator.hasNext())
{
// 得到迭代器中的entry
Map.Entry entry = (Map.Entry) iterator.next();
// 得到entry中的值。
Employee employee = (Employee) entry.getValue();
// 如果employee的工资大于5000
if(employee.getSalary()>5000)
{
// 输出
System.out.println(employee);
}
}
}
}
class Employee{
private String name;
private double salary;
private int id;
public Employee(String name, double salary, int id) {
this.name = name;
this.salary = salary;
this.id = id;
}
public double getSalary() {
return salary;
}
@Override
public String toString() {
return this.id+"\t"+this.name+"\t"+this.salary;
}
}
HashTable 介绍和使用
介绍
1.hashtable和hashmap一样存放键和值(key-values).
2.不能存放相同键值的值。
3.使用方法和hashmap非常的相似。
4.hashtable是线程安全的,但是效率不如hashmap。
5.底层是由数组+链表+红黑树实现。
基本使用
import java.lang.reflect.MalformedParameterizedTypeException;
import java.net.CookieHandler;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
public class Main {
public static void main(String[] args) {
Hashtable<Object, Object> hashtable = new Hashtable<>();
hashtable.put(1,"1");
hashtable.put(1,"2");
hashtable.put("good","dog");
hashtable.put("finally","i win this game");
Set keySet = hashtable.keySet();
for(Object obj:keySet)
{
System.out.println(obj);
System.out.println("value::"+hashtable.get(obj));
}
System.out.println(hashtable);
}
}
Properties介绍和使用
1.Properties 继承了hashtable 类并且实现了Map接口,同样也是使用(key ——value)的形式存放数据。
2.使用和hashtable相似。
3.Properites主要用于文件,比如(name.properties)主要从中加载数据到properties类中。
4.通常用作配置文件。
基本使用
import java.awt.print.Printable;
import java.lang.reflect.MalformedParameterizedTypeException;
import java.net.CookieHandler;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
public class Main {
public static void main(String[] args) {
Properties properties = new Properties();
properties.put("name","chaco");
properties.put("ip","192.168.4.22");
properties.put("value",442223);
System.out.println(properties);
System.out.println(properties.get("value"));
Set set = properties.keySet();
for(Object obj : set)
{
System.out.println(obj+":"+properties.get(obj));
}
}
}
TreeMap的介绍和使用
1.和其他map不同的是可以排序。
2.底层由红黑树实现。
3.treemap和hashmap一样存放键和值(key-values).
4.存在线程不安全。
基本使用
import java.awt.print.Printable;
import java.lang.reflect.MalformedParameterizedTypeException;
import java.net.CookieHandler;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
public class Main {
public static void main(String[] args) {
// 得到treeMap
TreeMap<Object, Object> treeMap = new TreeMap<>(
// 定义排序规则
new Comparator<Object>() {
@Override
public int compare(Object o, Object t1) {
return ((String)o).compareTo((String) t1);
}
}
);
// 插入元素
treeMap.put("zombie","good apple");
treeMap.put("value",2342);
treeMap.put("salary",234.44);
// 输出集合
System.out.println(treeMap);
// 输出键对应的值
System.out.println(treeMap.get("salary"));
// 打印输出
Collection collection = treeMap.keySet();
// 得到迭代器
Iterator iterator = collection.iterator();
//如果有下一个key
while (iterator.hasNext())
{
// 得到这个key的
String key =(String) iterator.next();
// 输出这个key和key的值。
System.out.println(key+":"+treeMap.get(key));
}
}
}