黑马程序员-学习日记07

7.、Set

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

Set容器的特点是,元素的存入和取出的顺序不一致,且不能出现重复元素。
其常用实现类包括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) 从指定映射中将所有映射关系复制到此映射中(可选操作)。

Map集合中常见的三个子类对象
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);  
 }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值