Set和Map用法 java

Set:零个或多个不重复组成的无序数组组成的集合

表达方式

  • HashSet:元素存放顺序和添加进去时候的顺序没有任何关系
  • TreeSet:对我们的Set中的元素进行排序存放
  • LinkedHashSet :作为HashSet的子类:保持元素的添加顺序
  • EnumSet

set.add(5)//adding 添加(无顺序概念)

membership set.contains(5)//checking 是否存在

set.remove(5)//remove 

set.addAll(c)//union set ∪ c

set.retainAll(c)//intersection set ∩ c

set.removeAll(c)//difference set \ c

set.containsAll(c)//contain or subset check whether set ⊇ c

set.size()//size 

contents set.clear()//clear 

用HashSet的方式表达

    Set<Integer> set = new HashSet<>();

import java.util.HashSet;
import java.util.Set;

/**
 *
 * @author 
 */
public class STE {

    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        set.add("B");
        set.add("C");
        set.add("A");
        System.out.println(set.contains("D"));
    }
}


import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

public class set1 {

    public static void main(String[] args) {
        Set<Integer> set1 = new HashSet<>();
        set1.addAll(Arrays.asList(new Integer[]{1, 3}));//从列表创建集合(从数组创建)
        Set<Integer> set2 = new HashSet<>();
        set2.addAll(Arrays.asList(new Integer[]{2, 5, 4}));

        set1.addAll(set2);
        System.out.println("set1 = set1 ∪ set2 = " + set1);

        System.out.println(set1.containsAll(set2));

        Set<Integer> intersectionSet = new HashSet<>(set1);//从另一个集合创建集合
        Set<Integer> set3 = new HashSet<Integer>();
        set3.addAll(Arrays.asList(new Integer[]{1, 5, 6, 7}));
        intersectionSet.retainAll(set3);
        System.out.println("set1 ∩ set3 = " + intersectionSet);
    }
}

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

public class Set2 {

    public static void main(String[] args) {
        Set<Integer> set4 = new HashSet<>();
        set4.addAll(Arrays.asList(new Integer[]{1, 2, 3, 4, 5}));
        Set<Integer> set5 = new HashSet<>();
        set5.addAll(Arrays.asList(new Integer[]{2, 5}));

        Set<Integer> setDifference = new HashSet<>(set4);
        setDifference.removeAll(set5);
        System.out.println("set4 \\ set5 = " + setDifference);

        setDifference.remove(1);
        System.out.println(setDifference);
    }
}

Map:键-值对(key-value)集合

Map 集合中的每一个元素都包含一个键对象和一个值对象。其中,键对象不允许重复,而值对象可以重复,并且值对象还可以是 Map 类型的,就像数组中的元素还可以是数组一样。

表达方式

  • TreeMap
  • HashMap
  • LinkedHashMap
map.put(key, val) //adding the mapping key → val 添加映射键→ 值
map.get(key) //get the value for a key 获取键的值
map.containsKey(key) //test whether the map has the key 测试映射是否具有密钥
map.containsValue(value) //test whether the map has the value 测试映射是否具有该值
map.remove(key) //delete a mapping 删除映射
map.keySet() //returns a set containing all keys 返回包含所有键的集合

eg.

假设我们有一个包含多个重复单词的字符串列表,例如:[“a”,“b”,“a”、“c”、“b”、“单词”、“a”和“单词”],我们想知道哪些单词出现在列表中,每个单词出现多少次,下面是使用Map的NumWords算法:

  1. 创建映射<String,Integer>
  2. 循环遍历列表中的所有字符串
  3. 将每个字符串用作地图中的键
  4. 使用Integer值存储该字符串的显示次数
  5. 有两种情况:
  •  当我们第一次看到一个单词时,它还没有出现在地图上,我们就添加它
  •  当我们稍后看到这个单词时,它已经在地图中,我们会更新它
import java.util.HashMap;
import java.util.Map;
public class NumWords {
   public Map<String, Integer> wordCount(List<String> list) {
      Map<String, Integer> map = new HashMap<>();
      int num;
      for (String word : list) {
         if (!map.containsKey(word)) {//我们第一次看到字符串
            map.put(word, 1);
         } 
         else {
            num = map.get(word);
            map.put(word, num + 1);//我们增加单词的数量
         }
      }
   return map;
   }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 2集合框架图  集合接口:6个接口(短虚线表示),表示不同集合类型,是集合框架的基础。  抽象类:5个抽象类(长虚线表示),对集合接口的部分实现。可扩展为自定义集合类。  实现类:8个实现类(实线表示),对接口的具体实现。  在很大程度上,一旦您理解了接口,您就理解了框架。虽然您总要创建接口特定的实现,但访问实际集合的方法应该限制在接口方法的使用上;因此,允许您更改基本的数据结构而不必改变其它代码。  · Collection 接口是一组允许重复的对象。  · Set 接口继承 Collection,但不允许重复,使用自己内部的一个排列机制。  · List 接口继承 Collection,允许重复,以元素安插的次序来放置元素,不会重新排列。  · Map接口是一组成对的键-值对象,即所持有的是key-value pairs。Map中不能有重复的key。拥有自己的内部排列机制。  · 容器中的元素类型都为Object。从容器取得元素时,必须把它转换成原来的类型。  Java 2简化集合框架图  集合接口  1.Collection 接口  用于表示任何对象或元素组。想要尽可能以常规方式处理一组元素时,就使用这一接口。  (1) 单元素添加、删除操作:   boolean add(Object o):将对象添加给集合   boolean remove(Object o): 如果集合中有与o相匹配的对象,则删除对象o  (2) 查询操作:   int size() :返回当前集合中元素的数量   boolean isEmpty() :判断集合中是否有任何元素   boolean contains(Object o) :查找集合中是否含有对象o
Java中,也有类似于C++ STL中的mapset的容器。Java中的mapset都是基于接口实现,常用的实现类有HashMap、TreeMap、LinkedHashMap等。常用的set实现类有HashSet、TreeSet、LinkedHashSet等。 Map接口和Set接口的主要区别在于,Map接口用于存储键值对,而Set接口用于存储不重复的元素。Map接口提供了put()、get()、remove()等方法,Set接口提供了add()、remove()、contains()等方法。 HashMap是一种基于哈希表实现的Map接口的实现类,它提供了快速的查找、插入和删除操作,查找、插入和删除操作的时间复杂度都为O(1)。HashMap中的键和值都可以为null,但HashMap不保证元素的有序性。如果需要按照元素的插入顺序访问元素,可以使用LinkedHashMap。 TreeMap是一种基于红黑树实现的Map接口的实现类,它保证了元素的有序性,元素按照键的自然顺序或比较器顺序进行排序。TreeMap的查找、插入和删除操作的时间复杂度都为O(logN)。 HashSet是一种基于哈希表实现的Set接口的实现类,它提供了快速的查找、插入和删除操作,查找、插入和删除操作的时间复杂度都为O(1)。HashSet不保证元素的有序性,元素可以为null。 TreeSet是一种基于红黑树实现的Set接口的实现类,它保证了元素的有序性,元素按照自然顺序或比较器顺序进行排序。TreeSet的查找、插入和删除操作的时间复杂度都为O(logN)。 LinkedHashSet是一种基于哈希表和链表实现的Set接口的实现类,它保证了元素的插入顺序,同时提供了快速的查找、插入和删除操作。LinkedHashSet的查找、插入和删除操作的时间复杂度都为O(1)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值