Java day 14

1、Set集合的特点:

  (1)无序(存储和读取的顺序有肯不一样);
  (2)不允许重复(要求元素唯一);
  (3)没有索引

2、HashSet有三种遍历集合对象的方式:

  (1)转换成数组;
  (2)迭代器;
  (3)增强for
  例:
     package com.itheima;
     import java.util.HashSet;
     import java.util.Iterator;
     import java.util.Set;
     public class HashSetDemo {
     public static void main(String[] args) {
    //创建集合对象
    //HashSet<String> hs=new HashSet<String>();
    Set<String> set=new HashSet<String>();//父接口引用指向指向子类对象
    //添加元素对象
    set.add("hello");
    set.add("world");
    set.add("java");
    //遍历集合对象
    //method(set);
    //method1(set);
    for(String s:set) {
        System.out.println(s); 
        }
       }

   public static void method1(Set<String> set) {
    //迭代器
    Iterator<String> it=set.iterator();
    while(it.hasNext()) {
        String s=it.next();
        System.out.println(s);
        }
    }

   public static void method(Set<String> set) {
    //转换成数组
    Object[] obj=set.toArray();
    for(int i =0;i<obj.length;i++) {
        System.out.println(obj[i]);
     }
  }

}

3、HashSet的add()方法的去重功能:

  (1)当前集合中的每一个元素和新添加的元素进行hash值比较;
  (2)如果hash值不一样,则直接添加新元素;如果hash值一样,则比较地址值或者使用equals方法进行比较;
  (3)如果比较的结果一样,则认为是重复不添加;如果比较的结果不一样,则添加
    以Person类为例:
      @Override 
       public String toString() { 
       return "Person [name=" + name + ", age="+ age + "]"; 
       }
      @Override 
      public int hashCode() { 
      return age+name.hashCode();
      }
      @Override 
      public boolean equals(Object obj) {
      System.out.println("---------"); 
       //提高效率
      if(this==obj) { 
      return true; 
      }
      if(this.getClass()!=obj.getClass()) { 
      return false; 
      } 
      //向下转型
     Person p=(Person)obj; 
     if(!this.name.equals(p.name)) { 
     return false; 
     }
    if(this.age!=p.age) { 
    return false; 
    } 
   return true; 
   }
 注意:
    去重中提高程序效率的方法:
       让成员变量不同的对象,他们的返回值也不同,即让HashCode()方法的返回值和对象的成员变量有关,可以让HashCode()方法返回所有成员变量之和(基本数 
       据类型直接相加;引用数据类型获取HashCode()方法返回值后再相加(boolean不可以参与运算))

4、Collection和Collections的区别:

  (1)Collection是集合体系的最顶层,包含了集合体系的共性;
  (2)Collections是一个工具类,方法都是用于操作Collection
  Collections中的一些基本操作:
    (1)static void swap(List list,int i,int j):将指定列表中的两个索引进行位置互换;
    (2)static void sort(List<T> list):按照列表中元素的自然顺序进行排序;
    (3)static void shuffle(List list):随机置换;
    (4)static void reverse(List list):反转;
    (5)static void fill(List list,Object obj):使用指定的对象填充指定列表的所有元素;
    (6)static void copy(List dest,List src):把源列表中的数据覆盖到目标列表中;
    (7)static void binarySearch(List list,Object key):使用二分查找法查找指定元素在指定列表的索引位置

5、Map:专门用于存储对应关系的集合

     Map和Collection的区别:
      (1) Map:是一个双列集合,常用于处理有对应关系的数据,其中key是不能重复的;
      (2)Collection:是单列集合,有不同的子体系,有的允许重复索引,有序;有的不允许重复索引,无序
    注意:
       Map是将键映射到值的对象。一个映射不能包含重复的键,每个键最多只能映射到一个值(一对一关系)
   Map的常用功能:
    (1)V put(K key,V value):将key映射到value,如果key存在,则覆盖value,并将原来的value返回;
    (2)void clear():清空所有的对应关系;
    (3)V remove(Object key):根据指定的key删除对应关系,并返回key所对应的值,如果没有删除成功,则返回null;
    (4)boolean containsKey(Object key):判断指定key是否存在;
    (5)boolean containsValue(Object value):判断指定value是否存在;
    (6)boolean isEmpty():判断是否有对应关系;
    (7)int size():返回对应关系的个数;
    (8)V get(Object key):根据指定的key返回对应的value;
    (9)Collection<V> values():以collection的形式返回所有的value;
    (10)Set<K> keySet():以set的形式返回所有的key
  遍历Map的两种方式:
     例:
      (1)遍历Map对象(第一种方式)
    Set<String> keys=map.keySet();
    for(String key:keys) {
        String value=map.get(key);
        System.out.println("编号:"+key+"姓名:"+value);
      (2)遍历Map对象(第二种方式)
    Set<Map.Entry<String, String>> entrys=map.entrySet();
    for(Map.Entry<String, String> entry:entrys) {
        String key=entry.getKey();
        String value=entry.getValue();
        System.out.println("编号:"+key+"姓名:"+value);
       注:HashMap的遍历和Map一样,并且可以实现去重,相同编号的后面会覆盖前面的

猜你喜欢

转载自www.cnblogs.com/cqxljj/p/10286860.html