• Java学习笔记(4)——JavaSE


    一、HashMap
    HashMap以键值对的形式存储对象,关键字Key是唯一的,不重复的
    1,key可以是任何对象,Value可以任何对象
    2,重复的key算一个,重复添加是替换操作(会覆盖原来的元素)
    3,根据key的散列值计算散列表,元素按照散列值排序
    4,HashMap默认的容量是16,默认加载因子0.75
    5,HashMap根据Key检索查找value值
    hashMap常用的方法:
    clear()
    containsKey(Object key)
    containsValue(Object value)
    get()
    isEmpty()
    keySet() 返回所有的key(注意:返回值都放入set集合中)
    put(key , value) 向Map中加入元素
    remove(Object o)
    size()
    二、集合框架(Collection和Map)
    集合框架包括集合与映射(Collection and Map),以及它们的子类(容器类)
    1,List元素有先后次序的集合,元素有index位置,元素可以重复,继承自Collection接口
      实现类: ArrayList,Vector,LinckedList
    2,Set元素无序,不能重复添加,是数学意义上的集合,继承自Collection接口
      实现类: HashSet(是一个只有Key的HashMap)
      TreeSet
    3,Collection 集概念,没有说明元素是否 重复和有序,使用集合的根接口,很少直接使用
      其他集合都是实现类:ArrayList, HashSet
    4,Map描述了(Key:Value)成对放置的集合,Key不重复,Value可以重复(Key重复算一个)
      实现类:HashMap(散列表算法实现)
      TreeMap(二叉树实现,利用Key排序)
      Map适合检查查找
    三、集合的迭代
    集合的迭代,是一种遍历算法
    1,java使用Iterator接口描述了迭代模式操作
      Iterator中的方法,专门为while循环设计
    2,Iterator的实例可以从集合对象获得,是这个集合的一个元素序列视图,默认包含一个操作游标
      (这个游标在第一个元素之前)
      hasNext()方法,可以检查游标是否有下一个元素
      next()方法,移动游标到下一个元素,并且返回这个元素引用。
      使用while循环配合这两个方法,可以迭代处理集合的所有元素
    4,迭代时可以使用迭代器remove()方法删除刚刚迭代的元素在迭代过程中
      迭代时不能使用集合方法(add, remove,set)更改集合元素!
    --------------------------------------------------------------------------
    Iterator<String> ite = eggs.iterator();
    while(ite.hasNext()){
    String egg = ite.next();
    System.out.println(egg);
    }
    --------------------------------------------------------------------------
    四、集合工具类Collections
    同数组的工具类Arrays相同,集合的工具类为Collections,其中提供了许多的方法,诸如排序,
    二分查找,打乱,填充等操作。
    Collections.sort()底层调用了str.compareTo()方法比较大小
    五、Comparable和Comparator
    Comparable表示可以比较的(用于类实现)
    实现这个接口表示:这个类的实例可以比较大小,可以进行自然排序
    compareTo()返回正数表示大,返回负数表示小,返回0表示相等
    Comparable的实现必须与equals()的结果一致,就是相等的对象时候,比较结果一定是0!
    Comparator 比较工具
    用于临时定义比较规则,不是默认比较规则
    ------------------------------------------------------------------------------------------
    String[] strs = {"abcff", "abc", "abde", "a"};
    Arrays.sort(strs, new Comparator(){ //回调函数
    public int compare(Object o1, Object o2){
    String s1 = (String) o1;
    String s2 = (String) o2;
    return s1.length() - s2.length();
    }
    });
    System.out.println(Arrays.toString(strs));
    -------------------------------------------------------------------------------------------
    六、java中的包装类
    包装类可以把基本类型包装为对象类型。
    1,共有8种包装类
    int   Integer
    long  Long
    byte  Byte
    short Short
    float Float
    double Double
    boolean Boolean
    char Character
    2,包装类提供了对应数据类型的工具方法
    Integer.toHexString()
    Integer.toString(int)
    Integer.toBinaryString()
    Integer.parseInt(String)
    Integer.parseInt(String, int)
    Double.parseDouble(String str);
    3,自动包装(auto boxing/ unboxing)
    java5以后可以
    4,注意点
    包装类是final的类
    包装类对象是不变的,与字符串类似(不变模式)
    Integer a = 1;
    Integer b = 2;
    a = a + b ;
    a = new Integer(a.intValue() + b.intValue())
    包装类覆盖了 toString(), equals(), hashCode(), compareTo()方法
    七、集合复制
    java默认集合的复制规则是浅层复制
    集合复制有2种方式
    1,clone()方法
      clone()方法是Object定义的
    2,使用"复制构造器"
    Map map = new HashMap();
    Map map2 = new HashMap(map);
    List list1 = new ArrayList();
    List list2 = new LinkedList(list1);
    浅表复制clone()方法
    -------------------------------------------------------------------------------------
    package notebook;
    import java.util.*;
    public class CollectionClone {
    public static void main(String[] args){
    ArrayList<FOO> list = new ArrayList<FOO>();
    list.add(new FOO());
    list.add(new FOO());
    ArrayList<FOO> list2 = (ArrayList<FOO>)list.clone();
    ArrayList<FOO> list3 = list;
    System.out.println(list3 == list);
    System.out.println(list2 == list);   //复制第一层
    System.out.println(list2.get(0) == list.get(0));  //第二层元素没有被复制
    }
    }
    class FOO{
    int a = 1;
    }
    -------------------------------------------------------------------------------------
    浅表复制”复制构造器“
    1,所有集合都有”复制构造器“,是浅表复制
    2,”复制构造器“的参数是多态,可以在不同种类的集合间复制
    -------------------------------------------------------------------------------------
    package notebook;


    import java.util.ArrayList;
    import java.util.HashSet;
    import java.util.LinkedList;


    public class CollectionClone{
    public static void main(String[] args){
    ArrayList<FOO> list = new ArrayList<FOO>();
    list.add(new FOO());
    list.add(new FOO());
    LinkedList<FOO> list4 = new LinkedList<FOO>(list);
    HashSet<FOO> set = new HashSet<FOO>(list);
    System.out.println(list4.containsAll(list));
    System.out.println(set.containsAll(list));
    }
    }
    class FOO{
    int a = 1;
    }
    -------------------------------------------------------------------------------------
    八、同步化(线程安全)
    同步化解决方案
    1,Collections.synchronizedList()方法可以将非线程安全的list包装为线程安全的
    List list = new ArrayList();
    list = Collections.synchronizedList(list);  //转换以后就相当于Vector
    2,Collections.synchronizedMap()方法可以将非线程安全的map包装为线程安全的
    HashMap map = new HashMap();
    map = Collections.synchronizedMap(map);
    九、数组与集合的转换
    1,数组转集合
    ---------------------------------------------------------------------------------------
    package notebook;


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


    public class Demo {
    public static void main(String[] args){
    String[] names = {"zs", "ls", "wu"};
    List list = Arrays.asList(names);
    //list.add("hh"); 有异常

    //复制为全功能的list
    List list2 = new ArrayList(list);
    list2.add("ww");
    System.out.println(list2);

    //或放入set集合
    Set se = new HashSet(list);
    se.add("hh");
    System.out.println(se);
    }
    }
    ---------------------------------------------------------------------------------------
    2,集合转数组
    ---------------------------------------------------------------------------------------
    package notebook;
    import java.util.*;
    public class Demo02 {
    public static void main(String[] args){
    List<String> list = new ArrayList<String>();
    list.add("ls");
    list.add("wu");
    list.add("zs");
    //集合转指定类型数组
    String[] str = (String[])list.toArray(new String[]{});
    for(String s:str){
    System.out.println(s);
    }
    }
    }
    ---------------------------------------------------------------------------------------
    十、Collection与Collections
    面试可能会遇到的题目,Collection和Collections的区别是什么?
    Collection  抽象的集合概念,实现它的有List和Set
    Collections 集合静态工具类,包含集合的工具方法,如sort()等

  • 相关阅读:
    Java程序员从笨鸟到菜鸟全部博客目录
    Problem I
    Problem I
    Problem S
    Problem S
    Problem X
    Problem X
    Problem Q
    Problem Q
    Ellipse
  • 原文地址:https://www.cnblogs.com/pangblog/p/3243926.html
Copyright © 2020-2023  润新知