7.、Set
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
其常用实现类包括HashSet、TreeSet.
(1)HashSet
HashSet是线程不同步的容器,底层实现方式是Hash表,所以在该类的很多方法中,底层都掉用了HashCode()方法的返回值,除此之外,还用到了equals()方法。
例如在向一个HashSet实例中,添加一个元素,会首先看该对象的HashCode,如果HashCode与该HashSet实例中的任何元素都不同,则认为是不同元素,则添加进来;
若HashCode相同,则继续判断equals返回值,若返回值为true,则认为二者是同一对象,否则认为是不同对象,而添加进来。
因此,在向该类实例化对象中添加自定义类的时候,必须复写该类的HashCode()和equals()方法,来实现自己的规则。(2)TreeSet
该类的底层实现为二叉树。
可以对该集合中的元素排序,这就要求其元素的类必须实现Comparable接口或者
在实例化TreeSet的时候,传入一个实现Comparator接口的类的实例。
当被传入Comparator时候,就不再用元素类中的Comparable中提供的排序方法。
List与Set的区别:
有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入
位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素
,并搜索列表中的元素。与 set 不同,列表通常允许重复的元素。更正式地说,列表通常允许满足
e1.equals(e2) 的元素对 e1 和 e2,并且如果列表本身允许 null 元素的话,
通常它们允许多个 null 元素。
一个不包含重复元素的 collection。更正式地说,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。
List判断元素是否存在,依赖equals方法,而HashSet先判断HashCode后判断equals方法。
Map集合
该集合存储键值对。一对一对往里存,而且要保证键的唯一性(与Set集合保证元素唯一性一致)。一个映射不能包含重复的键。每个键最多只能映射到一个值。
Collection是单列对象集合,而Map是键值对集合。添加,删除,判断,获取元素。
clear()
从此映射中移除所有映射关系(可选操作)。
remove(
Object key)
如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。
Containskey()ContainsValue()判断键和值是否在集合中存在。
get(
Object key)
返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null
。
values()
返回此映射中包含的值的 Collection
视图。
添加
put(
Kkey,
Vvalue)
将指定的值与此映射中的指定键关联(可选操作)。
PutAll(
Map<? extends
K,?extends
V>m)
从指定映射中将所有映射关系复制到此映射中(可选操作)。
HashMap:底层是哈希表数据结构,线程不同步。允许使用null值和null键,效率高
HashTable:线程同步。不允许存入null值和null键,效率低
为了成功的在哈希表中存储和获取对象,用作键的对象必须实现hashCode方法和equals方法。
TreeMap:底层是二叉树数据结构,线程不同步,给键排序是它的主要特点
import java.util.*;
public class MapDemo
{
public static void main(String[] args)
{
Map<String,String> mp = new HashMap<String,String>();
System.out.println(mp.put("01","001"));
System.out.println(mp.put("01","0001"));
//在Map中存入一个键相同的值后,新的值会替换旧的值,这与set集合不同。
//旧的值通过put方法返回
mp.put("02", "002");
mp.put("03","003");
mp.put("04","004");
System.out.println(mp.containsKey("02"));
System.out.println(mp.remove("01"));
//当remove删除键在集合中不存在时候,返回null
//当remove删除的键在集合中存在时,返回这个键所对应的值
System.out.println(mp);
String s = mp.get("04");
//通过键去得到键所对应的值
System.out.println(s);
mp.put(null,null);
//HashMap中能存null键与null值
//获取map中所有的值
Collection<String> c = mp.values();
System.out.println(c);
c.remove("002");
System.out.println(c);
System.out.println(mp);
}
}