zoukankan      html  css  js  c++  java
  • Java学习第十五天

    1.Map:独立的接口

        ---HashMap:使用的是哈希表,保证键不重复依据: int hashCode() boolean equals(Object obj)

        ---TreeMap:使用的是二叉树,根据键排序,Comparable<E> int compareTo(E e) Comparator<E> int compare(E e1,E e2)

        注意:compareTo()或compare方法返回值为0则认为是相同的键

    2.数组转字符串:
      Arrays.toString()
      例:int[] arr={2,4,5,6,7,8};
      String ss = Arrays.toString(arr);

    3.数组转集合:

      Arrays.asList()
      缺点:数组转成的集合不能添加或删除数据,不能扩容
      例:String[] arr2 = {"hello","haha","hehe"};
      List<String> list=Arrays.asList(arr2);

      目的:可以利用集合集合的丰富的方法


    4.集合转数组

      Object[] toArray()
      <T> T[] toArray(T[] a)

      注意:
        1.给定的数组长度大于集合大小,使用给定的数组
        2.给定的数组长度小于集合大小,会创建一个新的数组并返回
        3.给定的数组长度最好和集合的size相同
        例:String[] arr=list.toArray(new String[list.size()]);
      目的:当不希望对数据进行随意增删时

     5.集合的工具类:

      <T extends Comparable<? super T>> void Collections.sort(List<T> t)

    Collections.sort(List<T> t)
    Collections.sort(List<T> t,Comparator c)
    Comparator Collections.reverseOrder()
    Collections.max(Collection list)
    Collections.reverse(List list);

     1 例子:
     2 import java.util.*;
     3 
     4 class ComByLeng implements Comparator<String>
     5 {
     6 public int compare(String s1,String s2){
     7 int n = s1.length()-s2.length();
     8 return n==0?s1.compareTo(s2):n;
     9 }
    10 }
    11 class Demo6 
    12 {
    13 public static void main(String[] args) 
    14 {
    15 //使用list集合,还要排序
    16 //static <T extends Comparable<? super T>> void sort(List<T> list) 
    17 
    18 List<Student> list = new ArrayList<>();
    19 list.add(new Student("lisi",21));
    20 list.add(new Student("zhaosi",20));
    21 list.add(new Student("wangsi",18));
    22 
    23 Collections.sort(list);
    24 sop(list);
    25 
    26 List<String> list = new ArrayList<>(); //String implements Comparable
    27 list.add("zwoieurowie"); 
    28 list.add("wlksjioerwerwreserere");
    29 list.add("alks");
    30 
    31 //Collections.sort(list);//用的是集合中对象默认的排序规则
    32 //Collections.sort(list,Collections.reverseOrder()); //按字符串从大到小排序
    33 //sop(list);
    34 
    35 //Collections.sort(list,new ComByLeng());//使用自定义的排序方式排序,按照字符串长度排序
    36 //Collections.sort(list,Collections.reverseOrder(new ComByLeng())); //按字符串长度从长到短排序
    37 //sop(list);
    38 
    39 //static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll) 
    40 //String max = Collections.max(list);//求集合中的最大值
    41 //sop(max);
    42 
    43 Collections.reverse(list);//反转集合
    44 sop(list);
    45 }
    46 public static void sop(Object obj){
    47 System.out.println(obj);
    48 }
    49 }

    6.集合中的对象不重复,有序:

      LinkedHashSet : Collections.synchronizedSet(new LinkedHashSet())

      LinkedHashMap : Collections.syncharonizedMap(new LinkedHashMap())
      注意:本身都是线程不安全的,但是可以Collections.synchronizedMap()方法定义线程安全的

    例:
    import java.util.*;
    class Demo7 
    {
    public static void main(String[] args) 
    {
    //希望集合中的对象不重复,还希望有序
    
    //使用了两种数据结构,为了实现数据的有序 123 123
    //线程不安全的
    LinkedHashSet<String> lhs = new LinkedHashSet<>();
    lhs.add("java01");
    lhs.add("java02");
    lhs.add("java03");
    
    //sop(lhs);
    
    //创建线程安全的LinkedHashSet对象
    Set<String> set=Collections.synchronizedSet(new LinkedHashSet<String>());
    set.add("java05");
    set.add("java06");
    set.add("java07");
    
    //sop(set);
    
    
    
    LinkedHashMap<String,String> lhm = new LinkedHashMap<>();
    lhm.put("name","lisi");
    lhm.put("age","20");
    lhm.put("address","shanghai");
    
    //sop(lhm);
    
    //创建线程安全的LinkedHashMap对象
    Map<String,String> map = Collections.synchronizedMap(new LinkedHashMap<String,String>());
    map.put("name","lisi");
    map.put("age","20");
    map.put("address","shanghai");
    
    sop(map);
    
    
    //SortedSet----TreeSet SortedMap----TreeMap
    }
    
    
    public static void sop(Object obj){
    System.out.println(obj);
    }
    }

    7.SortedSet ---TreeSet
     SortedMap ---TreeMap

    8.增强的for循环:

      for(数据类型 变量名:被遍历的Collection集合或数组){}
      注意:对数组使用增强的for循环,不能操作下标


    9.可变参数:数组的原理
      定义:void show(int ... a){}
      List<T> asList(T... a)

      注意:可变参数必须位于参数列表的最后

     


    10.静态导入: import static java.util.Arrays;
      作用:可以省略类名不写,例如:import static java.util.Arrays;在调用Arrays的静态方法时,可以直接写方法名,不写Arrays
      注意:有相同的方法名,类名不能省略,
         方法名相同了,类名不能省
         类名相同了,包名不能省略,通过包名来区分


      

    Properties:是一个Map集合类,默认的键和值必须是String类型,存储属性
    Properties pro = System.getProperties();//得到的是系统属性集
    
    Set<String> keys=pro.stringPropertyNames();//得到集合中所有的键的集合
    
    for(String key:keys)
    {
    String v=pro.getProperty(key);
    System.out.println(key+"="+v);
    }
    
    pro.setProperty("line.separator","
    ");//相当于Map中的put 覆盖集合中同名的键值对,不会修改本来的数据,只是修改集合中的数据
    
     

    11.IO流:(input output)输入输出流,用来实现设备之间的数据传输

      IO流的分类:
        按照方向分:输入流,输出流(相对于内存的)

        按照操作的数据分:
          字节流:可以操作任何类型的数据,文本,图片,音频,视频

          字符流:只能操作文本类型的数据,字符流是在字节流的基础上融入了编码,
              所以说字符流是基于字节流的

        常见编码:ASCII,ISO8859-1(欧洲编码表),gb2312,gbk,UTF-8


    12.字节流(输入,输出)
      InputStream 字节输入流的父类
      OutputStream 字节输出流的父类

    13.字符流(输入,输出)
      Reader 字符输入流的父类
      Writer 字符输出流的父类

    14字符流:设备:硬盘
      使用FileWriter
        1.创建文件输出流对象和文件相关联 ,文件可以事先存在,也可以不存在,如果不存在就会自动创建

        FileWriter fileWriter=ewn FileWriter("temp.txt");
        2.使用文件输出流对象向文件中写入数据(要抛出异常)
        fileWriter.write("abc");//因为需要一个查表的过程,数据先写入到流对象内部的缓冲区了

        3.把缓冲区中的数据刷到文件中
        fileWriter.flush()

        4.关闭流(关闭后不能再写入数据,并且关闭流时会先刷新,即flush())
        fileWriter.close()

  • 相关阅读:
    NOIp2018集训test-9-23
    NOIp2018集训test-9-22(am/pm) (联考三day1/day2)
    NOIp2018集训test-9-21(am/pm)
    NOIp2018集训test-9-19(am&pm)
    day41.txt
    day40表关系
    day39
    day38数据库
    day37
    day36
  • 原文地址:https://www.cnblogs.com/demain/p/11409677.html
Copyright © 2011-2022 走看看