java map set 区别,java set list map

  java map set 区别,java set list map

  00-1010常用集集集集的功能哈希集创建对象的常用方法遍历常用映射集映射集概述哈希映射创建对象的常用方法遍历哈希映射的关键重复数据删除原则

  

目录

 

  00-1010集合接口下的集合将具有以下特征

  无法存储没有索引的重复元素。

  00-1010哈希集的特征

  底层数据结构是哈希表,元素存储的顺序可能与遍历得到的顺序不一致。重复元素不能存储在没有索引的集合中。

  

常用Set集合

HashSet元素数据类型set=new HashSet();

 

  public static void main(String[]args){ HashSet String set=new HashSet();}

  00-1010方法解释布尔add(E e)来添加一个元素。如果元素添加不成功,返回值指示元素是否添加成功。boolean remove(Object o)删除元素,表示元素是否删除成功的boolean contains(Object o)确定元素是否有int size()获取集合的大小public static void main(string[]args){ hashset string set=new hashset();//添加元素boolean f=set.add(愚蠢);set . add( born );set . add( shallow );Set.add (last )。system . out . println(f);}我们来中断调试一下:

  可以看到最后四个字符已经加载到集合中,f为真证明加法成功。

  让我们再次尝试删除:

  public static void main(String[]args){ HashSet String set=new HashSet();//添加元素set.add(愚蠢);set . add( born );set . add( shallow );Set.add (last )。boolean=set . remove( raw );}

  可以看到集合已经不存在了,f为真,表示删除成功。

  判断是否存在:

  public static void main(String[]args){ HashSet String set=new HashSet();//添加元素set.add(愚蠢);set . add( born );set . add( shallow );Set.add (last )。boolean=set . contains( end );}

  end存在于集合中,所以返回值为真。

  获取集合的大小:

  public static void main(String[]args){ HashSet String set=new HashSet();//添加元素set.add(愚蠢);set . add( born );set . add( shallow );Set.add (last )。//获取集合的大小int size=set . size();

  添加四个字符,这样就可以得到4的大小。

  /p>

 

  

遍历

1.转换为数组遍历

 

  

 public static void main(String[] args) { HashSet<String> set = new HashSet<>(); set.add("愚"); set.add("生"); set.add("浅"); set.add("末"); String[] strings = set.toArray(new String[0]); for (int i = 0; i < strings.length; i++) { System.out.println(strings[i]); } }

结果:

 

  

 

  前面说过:存储元素的顺序和遍历获取出来的顺序可能不一致。

  2.使用迭代器遍历

  

 public static void main(String[] args) { HashSet<String> set = new HashSet<>(); set.add("愚"); set.add("生"); set.add("浅"); set.add("末"); Iterator<String> it = set.iterator(); while (it.hasNext()){ String s = it.next(); System.out.println(s); } }

结果:

 

  

 

  3.foreach遍历

  

 public static void main(String[] args) { HashSet<String> set = new HashSet<>(); set.add("愚"); set.add("生"); set.add("浅"); set.add("末"); for (String s : set) { System.out.println(s); } }

结果:

 

  

 

  

 

  

常用Map集合

 

  

Map集合的概述

Map接口是双列集合的顶层接口,下面是Map接口的定义

 

  

interface Map<K,V> K:键的类型;V:值的类型

 

  

存储的数据必须包含key和value。

 

   key和value在Map集合中是一一对应的关系。一个key对应一个value。

   key在map集合中是不会重复的。

  

 

  

HashMap

HashMap集合的特点

 

  底层数据结构是哈希表存储元素的顺序和遍历获取出来的顺序可能不一致key不会重复

创建对象

HashMap<key的数据类型,value的数据类型> map = new HashMap<>();

 

  

例如:

 

  

 public static void main(String[] args) { HashMap<String,String> map = new HashMap<>(); HashMap<String,Integer> map = new HashMap<>(); }

常用方法

方法解释V put(K key, V value)添加元素,如果key不存在就添加,如果keyV get(Object key)根据key获取对应的value值返回。如果key不存在就返回nullV remove(Object key)根据key删除map中对应的键值对。并且把删除的value返回boolean containsKey(Object key)判断key是否存在int size()集合中键值对的对数void clear()清空集合中的所有键值对

 public static void main(String[] args) { HashMap<String,String> map = new HashMap<>();// map.put() //添加元素 map.put("name", "愷龍"); map.put("age", "20"); String v = map.put("name", "愚生浅末");//将原来的愷龍替换为愚生浅末 String name = map.get("name");//获取名字:愷龍 String age = map.get("age");//获取age:20 //删除元素 String delV = map.remove("age");//返回值为20 //判断key是否存在 if(map.containsKey("name")){ String agea = map.get("name");//null System.out.println(agea.length()); } //size int size = map.size(); map.clear(); }

遍历

1.使用entrySet遍历

 

  map集合的entrySet方法可以获取一个Set集合,集合中存放的是Entry对象,一个Entry对象相当于一个键值对。我们可以遍历set集合拿到Entry对象,然后获取出里面的键和值。

  使用迭代器遍历entrySet

  

 public static void main(String[] args) { HashMap<String,String> map = new HashMap<>(); map.put("name","愷龍"); map.put("age","20"); Set<Map.Entry<String, String>> entries = map.entrySet(); //使用迭代器遍历entrySet Iterator<Map.Entry<String, String>> it = entries.iterator(); while (it.hasNext()){ Map.Entry<String, String> entry = it.next(); System.out.println(entry.getKey()+"="+entry.getValue()); } }

结果:

 

  

 

  使用foreach遍历entrySet

  

 public static void main(String[] args) { HashMap<String,String> map = new HashMap<>(); map.put("name","愷龍"); map.put("age","20"); Set<Map.Entry<String, String>> entries = map.entrySet(); //使用foreach遍历entrySet for (Map.Entry<String, String> entry : entries) { System.out.println(entry.getKey()+"="+entry.getValue()); } }

结果:

 

  

 

  2.使用keySet遍历

  map集合的keySet方法可以获取一个Set集合,集合中存放的是所有的key。我们可以遍历set集合拿到key对象,然后通过key获取对应的value。

  

 public static void main(String[] args) { HashMap<String,String> map = new HashMap<>(); map.put("name","愷龍"); map.put("age","20"); Set<String> keys = map.keySet(); for (String key : keys) { System.out.println(key+"="+map.get(key)); } }

结果:

 

  

 

  

 

  

HashMap的key去重原理

HashMap在添加元素的时候会判断集合中是否有key和本次存入的key相同。判断的时候主要是通过hashCode方法和equals方法来进行判断的。hashCode相同,并且equals判断也相同就会认为是同一个key。

 

  

 

  所以如果我们要存储到HashMap中的key是一个自定义的类型。就需要根据情况判断下是否需要重写下hashCode方法和equals方法。重写的时候使用IDEA的提示即可。

  

public class Student { private int age; private String name; public String getName(){ return name = this.name; } public void setName(String name){ this.name = name; } public int getAge(){ return age = this.age; } public void setAge(int age){ this.age = age; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null getClass() != o.getClass()) return false; Student student = (Student) o; return age == student.age && Objects.equals(name, student.name); } @Override public int hashCode() { return Objects.hash(age, name); }}

注意:HashSet存储数据其实也是使用了HashMap。所以如果往HashSet中存储自定义对象也要看情况是否需要重写hashCode方法和equals方法。

 

  以上就是Java常用集合之Set和Map的用法详解的详细内容,更多关于Java Set Map集合的资料请关注盛行IT其它相关文章

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: