总结day15~16

1.集合

  HashMap集合本身基于哈希表,它可以保证键的唯一性(Map都是针对键有效)

//遍历

Set<Integer>set = map.keySet();

for(Integerkey :set) {

Stringvalue = map.get(key) ;

System.out.println(key+"---"+value);

}

 

  如果重写了hashCode()和equals()方法,当k一样时,v将会是最后一次赋值结果,如果没有重新将会重复键

k不一样时,v可以一样

 

  LinkedHashMap<K,V> :是Map接口基于哈希表和链接列表实现的,哈希表保证键的唯一性,链接列表保证元素有序性(存储和取出一致)

 

  TreeMap基于红黑树结构的Map接口的实现

面试题:

*                HashMap集合和Hashtable的区别?

*                共同点:都是map接口的实现类,都是基于哈希表的实现类

*                HashMap集合线程不安全的类,不同步,执行效率高(允许键和值是null)

*                Hashtable集合线程安全的类,同步,执行效率低(不允许有null键和null)

*

*

  线程安全的类:

*                         StringBuffer:字符串缓冲区

*                         Vector               :List集合

*                         Hashtable        :Map集合的

  CollectionCollections的区别:

*                Collection:顶层次单列集合的根接口,它是一个集合,是一个接口

*                Collections:是针对集合操作的工具类,有一些功能:随机置换,集合里面的二分查找,将集合的元素进行反转

*

  Collections的方法

* public static <T> intbinarySearch(List<T> list, T key) *集合的二分查找

* static  Tmax(Collection coll):获取集合中的最大值

* public static void reverse(List<?> list):将集合中的元素顺序反转

* public static void shuffle(List<?> list):将集合中的元素打乱

* public static void sort(List<T> list) //直接可以使用Collectionssort功能进行条件排序

 

 

示例

public class CollectionsDemo {

 

public static void main(String[] args) {

 

List<Integer> array = newArrayList<Integer>() ;

 

//添加元素

 

array.add(55);

array.add(11);

array.add(10);

array.add(20);

array.add(25);

array.add(21);

 

array.add(29);

System.out.println(array);

 

Collections.sort(array);

System.out.println(array);

 

/*     int index= Collections.binarySearch(array,11);  //针对集合元素有序

System.out.println(index);*/

 

// static  Tmax(Collection coll):获取集合中的最大值

//               System.out.println(Collections.max(array));

 

//public static void reverse(List<?> list):将集合中的元素顺序反转

/*Collections.reverse(array);

System.out.println(array);*/

 

 

 

//               publicstatic void shuffle(List<?> list):将集合中的元素打乱

/*Collections.shuffle(array) ;

System.out.println(array);*/

 

  public static void sort(List<T> list) //直接可以使用Collectionssort功能进行条件排序

 

//比较器排序 (两种方式习惯使用比较器排序)

Collections.sort(list, new Comparator<Student>(){

 

@Override

public int compare(Student s1, Student s2) {

//主要条件

int num = s1.getAge()-s2.getAge() ;

int num2= num==0 ?s1.getName().compareTo(s2.getName()):num ;

return num2 ;

}

});                                                   ArrayList底层数据结构式数组结构,查询块,增删慢从内存角度考虑:线程不安全的,不同步,执行效率高

 

                      List接口        LinkedList底层是一种链表实现,查询慢,增删快线程不安全的,不同步,执行效率高

                                                                                                                                                                                        

Vector底层是一种可增长对象数组,查询快,增删慢线程安全,同步,执行效率高

 

                                                                                                                                                                                                                                            

Collection接口     

   

                                      HashSet由哈希表(实际上是一个 HashMap 实例)支持。它不保证set 的迭代顺序;

特别是它不保证该顺序恒久不变。此类允许使用 null 元素。                                   

Set接口                                                                                                                                                                                                 

                                       TreeSet可以保证元素唯一并且元素排序(自然升序),add()基于TreeMapTreeMap又是红黑树结构(自平衡的二叉树结构)

 

 

 

HashMap实现类: 基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变                 

      

 HashTable实现类 此类实现一个哈希表,该哈希表将键映射到相应的值。任何null 对象都可以用作键或值。

Map<K,V>接口                          为了成功地在哈希表中存储和获取对象,用作键的对象必须实现hashCode 方法和 equals 方法。

 

 

TreeMap实现类基于红黑树(Red-Black tree)的NavigableMap实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的Comparator进行排序,具体取决于使用的构造方法。

 

 

  Map集合和Collection的区别?

               

                Map集合:是一种键和值的映射关系(双列集合)                   当作为:夫妻对

                Collection集合:单列集合,只能存储一种类型的元素        当作为:光棍

                间接关系:HashSet依赖于Map接口的子实现类HashMap

                               TreeSet依赖于Map接口的子实现类TreeMap

  Set集合和List集合的区别?

 

Set集合:不允许元素重复,唯一的(元素可以为null) ,不能保证迭代的顺序恒久不变(底层哈希表和hascode),无序(存储和取出不一致)

        List:允许元素重复,并且存储特点:有序性(存储和取出一致)

 

2.异常

  异常:

 *            编译时期异常:只要出现的不是运行时期异常,统称为编译时期  日期的文本格式---解析  java.util.Date类型:ParseException:解析异常

                                            编译时期异常:开发者必须处理!

 *            运行时期异常:RuntimeException

                                            编译通过了,但是开发者代码不严谨(NullPointerExceptino等等...)

  异常的处理分为两种:

 *             1)try...catch...finally (标准格式) :捕获异常

 *             2)throws...              抛出异常

       

 

  变形格式...

 try...catch...

 try...catch...catch...

 catch....

 

 try{

                 一些代码

                 try里面的代码越少越好

                 代码包含了可能会出现问题的代码

 }catch(异常类异常类对象){

        try出现异常了,描述的异常刚好就是catch的异常类,就会执行catch里面代码

         //处理异常

 }

 

  Jdk7以后出现另一种方式处理多个异常

     

 try{

               可能出现问题的代码;

  }catch(异常类名1 | 异常类名2 |... 对象名){

  

               处理异常

  }

标准格式 try{ ... }catch(异常类对象){ // 异常处理 } 执行try里面的代码

 * 如果出现了问题,它会通过代码的问题创建一个异常对象,然后通过异常对象和catch里面的异常类是否一致

  如果一致的情况,就会出现catch里面的代码,执行Throwable里面的方法

 

 * public String getMessage() :消息字符串

 *  publicString toString(): 异常的简短描述 ":

 * ":由冒号和空格组成

 *

 * public void printStackTrace():返回值void 直接调用, 包含了消息字符串,还有": "

 * 信息描述,具体出现异常的代码定位以及定位的源码上

  throw:表示也是抛出异常,抛出的一个异常对象 (throw new 异常类名() :匿名对象的方式)

 

  面试题:

                 throwsthrow的区别?

                 throws:也是表示抛出异常,它后面跟的异常类名,并且可以多个异常类名中间逗号开

                                    举例:

                                             publicvoid show() throws IoException,ClassNotFoundException{...}

                                    在方法上抛出,由调用者处理

                                    它表示抛出异常的可能性

                 throw:抛出的一个异常对象

                                    在语句体中抛出的,由语句体进行处理

                                    它表示抛出异常的肯定性

 

  try...catch...finally

                 finally语句体是一定会执行的,除非是Jvm退出了

 

  面试题:

                 如果catch里面有return 语句,finally中的代码还会执行,是在return语句之前执行还是return后执行?

                           finally中代码是一定会执行的,是在return

  自定义异常类,两种方式

                 1)自定义一个类,这个继承自Exception

                   2)继承RuntimeException

  

public class MyException extends Exception {

 

         publicMyException() {

                   super();

         }

 

         publicMyException(String message) {

                   super(message);

         }

        

}

  异常中的注意事项:

        子类继承父类的时候的注意事项

                           1)子类重写父类的方法的时候,子类的方法的抛出的异常必须要么是父类的方法异常一样,要么是父类方法异常的子类

                           2)子类重写父类方法的时候,如果父类中的这个方法没有抛出异常,那么子类重写的这个方法也不能抛出异常,只能try...catch

 

3.文件

  File:表示文件或者目录的路径的抽象表现形式.  IO流就是对文件进行操作的

 *public File(String pathname):表示pathname的抽象路径表现的形式 (开发中使用这种方式)

 *publicFile(String parent,String child)根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例

 *publicFile(File parent, String child):根据一个file对象和一个文件路径来构造File实例

 

跟创建相关的功能:

 *     publicboolean createNewFile():创建文件,当文件不存在的时候,创建此抽象路径下的文件

 *     publicboolean mkdir():创建一个文件夹,如果文件夹存在,不创建

 *     publicboolean mkdirs():创建文件夹,如果父目录不存在,会创建此目录

       

删除功能

 *     publicboolean delete() :删除文件或者文件夹(目录不能是空的)    :逐一删除文件或者目录的

 

*File的重命名功能:

 *              publicboolean renameTo(File dest)重新命名此抽象路径名表示的文件。

 *                        如果路径名一致的情况,那么只是重命名

 *                        如果两次路径名称不一致,那么不只是重命名,并且剪切

*File类的判断功能

 *              public boolean isDirectory():判断是否是文件夹

 *              publicboolean isFile() :判断是否是文件

 *              publicboolean canRead(): 是否可读

 *              publicboolean canWriter():是否可写

 *              publicboolean exists()      :是否存在

 *              publicboolean isHidden():是否是隐藏文件

 *File类的获取功能:

 *              publicString getAbsolutePath():获取抽象文件的绝对路径

 *              publicString getPath():获取相对路径的字符串

 *              publicString getName()返回由此抽象路径名表示的文件或目录的名称

 *              publiclong length()返回由此抽象路径名表示的文件的长度。

 *              publiclong lastModified():文件最后一次被修改的时间(时间毫秒值)

*File的高级功能

 *    publicString[] list() :获取当前某个路径下的所有的文件夹以及文件名称的字符串数组

 *    publicFile[] listFiles() :获取当前某个路径下所有的文件夹以及文件的File数组

         FilenameFilter:一个接口文件名称过滤器

         boolean accept(File dir, String name)测试指定文件是否应该包含在某一文件列表中。文件是否包含在文件列表中,取决于返回值,true;false表示不包含

猜你喜欢

转载自blog.csdn.net/Mr_L_h/article/details/80346992