Map与Set

作者: 啦啦啦_9a5f | 来源:发表于2018-12-19 10:45 被阅读0次

一、Set接口的特点

使用HashSet存储字符串并遍历

Set<String> set = new HashSet<String>();//父接口引用指向子类对象

//添加元素对象

set.add("hello");

set.add("world");

set.add("java");

//遍历集合对象

//Colleaction三种:转数组、迭代器、foreach,List有四种,由于List是有序的,多了一种索引,Set也是三种,Set没有索引

1.转数组

Object[] obj = set.toArray();
for(int i = 0;i < obj.length;i++){
  System.out.println(obj[i]);
}

2.迭代器

Iterator<String> it = set.iterator();
while(it.hasNext()){
  String s = it.next();
  System.out.println(s);
}

3. 增强for

for(String s : set){
  System.out.println(s);
}

4.Set集合的特点:

(1)无序(存储和读取的顺序有可能不一样)

(2)不允许重复(要求元素唯一)

(3)没有索引,因为没有顺序

5.HashSet中add()方法不能去重的原因:

HashSet()的add()方法,首先会使用当前集合中的每个元素和新添加的元素进行hash值比较

如果hash值不一样,直接添加新的元素

如果hash值一样,比价地址值或者使用equals方法进行比较

比较结果一样,则认为是重复不添加

送油的比较结果不一样则添加。

由于创建自定义对象时,传的参数是地址值,每个地址值都不同,即使对象的属性一致,也会添加进LinkedList

6.重写hashCode()和equals()方法实现HashSet存储自定义对象去重

(1)根据新添加的元素的hashCode()返回值计算出hash值

(2)先比较hash值,hash值不一样if语句结束

(3)如果hash值一样,则比较地址或者使用equals方法进行比较

(4)由此可以看出先重写hashCode()使hash值一致,在重写equals()比较对象中属性值。

二、Collections

1.面试题:Collection和Collections的区别:

(1)Collection是集合体系的最顶层,包含了集合体系的共性

(2)Collections是一个工具类方法都是用于操作Collection

2.Collections的常用方法

(1)static int binarySearch(List list, Object key)//使用二分查找指定元素在指定列表的索引位置,List是有序的

List<Integer> list = new ArrayList<Integer>();
list.add(1);//JDK1.5特性自动装箱
list.add(2);
list.add(3);
list.add(4);
int index = Colleaction.binarySearch(list,4);

(2)static void copy(List dest, List src):把源列表的数据覆盖到目标列表

List<String> src = new ArrayList<String>();
src.add("hello");
src.add("world");
src.add("java");
List<String> dest = new ArrayList<String>();
dest.add("");
dest.add("");
dest.add("");
Collections.copy(dest,src);

注意:目标列表的长度至少等于源列表的长度

(3)static void fill(List list, Object obj):使用指定对象填充指定列表的所有元素

List<String> list = new ArrayList<String>();
list.add("hello");
list.add("world");
list.add("java");
Colleactions.fill(list,"android");

(4)static void reverse(List list)

List<String> list = new ArrayList<String>();
list.add("hello");
list.add("world");
list.add("java");
Colleactions.reverse(list);

(5)static void shuffle(List list):使用指定的随机源对指定列表进行置换

(6)static void sort(List list):根据元素的自然顺序对指定列表按升序进行排序。

(7)static void swap(List list, int i, int j):在指定列表的指定位置处交换元素。

三、Map接口

为了提现有对应关系的数据,Java提供了一种专门用于存储对应关系的集合。

Map<K,V>:将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值

1.Map和Collection 的区别

Map:是一个双列集合,常用语处理有对应关系的数据,key是不可以重复的,称之为夫妻集合

Colleaction:是单列集合,Collection有不同的字体系,有的允许重复有索引有序,有的不允许重复且无序,称之为单身汉集合

2.Map的常用功能:

Map<String,String> map = new HashMap<String,String>();

(1)映射功能:

V put (K key,V value)//就是将key映射到value,如果key存在,则覆盖value,并将原来的value返回

System.out.println(map.put("001","zhangsan"));
System.out.println(map.put("001","wangwu"));
输出:null  zhangsan

(2)获取功能:

V get(Object key)

Set<K> keySet()

Collection<V> values()

int size()

System.out.println(map.size());//返回对应关系的个数
输出结果:2
System.out.println(map.get("001"));//根据指定的key返回对应的value
map.put("001","zhangsan");
map.put("002","lisi");
(map.put("003","wangwu"));
Set<String> keys = map.keySet();
for(String key : keys){
  System.out.println(key);
}
输出结果:001
              002
              003
map.put("001","zhangsan");
map.put("002","lisi");
(map.put("003","lisi"));
Colleaction<String> values = map.values();
for(String value : values){
  System.out.println(value);
}
输出结果:zhangsan
              lisi
              lisi

(3)判断功能

boolean containsKey(Object key)

boolean containsValue(Object value)

boolean isEmpty()

System.out.println(map.containsKey("001"));
输出结果:true
System.out.println(map.containsVaule("zhangsan"));
输出结果:false
System.out.println(map.isEmpty());
输出结果:false

(4)删除功能

void clear()

v remove(Object key)

map.clear();//清空所有的对应关系
System.out.println(map.remove("001"));//根据指定的key删除对应关系,并返回key所对应的值,如果没有删除成功返回null
输出结果:wangwu

(4)遍历功能:

Map的第一种遍历方式:

先找到所有的key,遍历所有的key,获取每一个key,去找key对应的value

map.put("001","zhangsan");
map.put("002","lisi");
(map.put("003","wangwu"));
Set<String> keys = map.keySet();
for(String key : keys){
  String value = map.get(key);
}

Map的第二种遍历方式:

Set<Map.Entry<K,V>> entrySet()

Entry是Map中的内部类

Set<Map.Entry<String,String>> entrys = map.entrySet();
for(Map.Entry<String,String> entry: entrys){
String key = entry.getKey(); 
String value = entry.getValue();
}

相关文章

  • Map 、Set&Object、Array

    1. Map和Set是什么? 2. Map和Set与Object和Array有什么区别,为何引入Map和Set? ...

  • Java中List、Set和Map的区别

    list、Set与Map List、Set都是继承Collection接口,而Map不是 List元素放入有序,可...

  • 四、Kotlin集合

    "集合:List、Set、Map" 集合:List、Set、Map 与大多数语言不同,Kotlin 区分可变集合和...

  • ES6--(7) Set与Map

    ES5 中的 Set 与 Map Set 与 Map 并不正式存在于 ES5 中。一般会使用对象来模拟 Set 和...

  • java 常用集合list与Set、Map区别及适用场景总结

    list与Set、Map区别及适用场景 1、List,Set都是继承自Collection接口,Map则不是 2、...

  • ES6

    Symbol Set和Map Set Map Proxy get() set() apply() Reflect ...

  • Map与Set

    注意:Map与Set首字母大写!!! Map Map是一组键值对的结构,具有极快的查找速度。 初始化方法一: 初始...

  • set与map

    Set 基本用法 ES6提供了新的数据结构Set,与数组类似,最大的特点是没有重复值,成员是唯一的 Set可以直接...

  • Set 与 Map

    Set Set 是一种集合结构,特征和数学中的一致,具有以下特征: 同一个集合中不能有相同元素 set 可以存放不...

  • Map与Set

    介绍一下Map、Set 1)Map 在ES6之前,JavaScript的对象有个小问题,就是键必须是字符串。为了解...

网友评论

      本文标题:Map与Set

      本文链接:https://www.haomeiwen.com/subject/rgbdkqtx.html