• 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一样,并且可以实现去重,相同编号的后面会覆盖前面的
    

    6、异常的体系结构:

      (1)Throwable(最顶层);
      (2)Error:出现不能够处理的严重问题;
      (3)Exception:可以处理的问题
      异常是在写代码时出现编译或者运行错误,包含了错误的类型,原因以及位置
    

    7、异常的处理方式:

        捕获处理
           try----catch语句
           try{
                可能出现问题的代码;
           }catch(异常对象){
               处理异常;
           }
       注意:jvm处理异常的方式:
            如果出现异常我们没有处理,jvm会帮我们进行处理,他会把异常的类型,原因已经位置显示在命令行,并且终止程序,异常后面的代码将不再执行
    

    8、处理多个异常:

     (1)使用多个try---catch语句;
     (2)使用一个try和多个catch
    注意:多个catch之间的顺序:
      (1)多个catch之间可以有子父类;
      (2)同级之间没有顺序关系;
      (3)如果有子父类,父类异常必须在后面
    

    9、Throwable的常用方法:

      (1)String getMessage():原因;
      (2)String toString():类型和原因;
      (3)void printStackTrace():类型、原因和位置
    

    10、finally:组合try---catch使用,用于释放资源等收尾工作,无论try---catch语句如何执行,finally的代码一定会执行

          格式:
               try{
                可能出现问题的代码;
           }catch(异常对象){
               处理异常;
           }finally{
              释放资源;
              清理垃圾;
           }
    

    11、异常的分类:

      (1)运行时期异常:RuntimeException的子类,在编译时期可以自由选择处理或者不处理;
      (2)编译时期异常:Exception的子类,不是RuntimeException的子类,在编译时期必须处理(抛出或捕获)
    

    12、throws和throw的区别:

     (1)throws:处理异常的一种方式,把异常抛出,由调用者来处理;
     (2)throw:制造异常的方式,并且结束方法
     注意:如果抛出(throw)的是编译时期的异常,必须在方法声明处抛出(throws) 
     定义异常类的方法:写一个类去继承 RuntimeException或  Exception,然后实现多个构造
    

    13、递归:在方法本身不断的调用方法自己

      注意:
      (1)递归一定要由出口,否则会内存溢出;
      (2)递归次数不宜过多,否则会内存溢出
  • 相关阅读:
    事务的手动创建和提交
    计数器AtomicInteger
    多线程方法执行等待
    【javascript动画系列之网页白板】javascript实现的白板(兼容ff,ie,chrome,……)
    ie6,7下js动态加载图片不显示错误
    php中遇到include_path='.;C:\php5\pear'的错误
    linux下php扩展curl的安装
    【转】Linux操作系统文件系统基础知识详解
    【javascript动画之圆形运动】环绕鼠标运动作小球(兼容ie,ff,chrome,……)
    as(ActionScript)拖动实现
  • 原文地址:https://www.cnblogs.com/cqxljj/p/10286860.html
Copyright © 2020-2023  润新知