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集合的
Collection和Collections的区别:
* 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) //直接可以使用Collections的sort功能进行条件排序
示例
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) //直接可以使用Collections的sort功能进行条件排序
//比较器排序 (两种方式习惯使用比较器排序)
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()基于TreeMap,TreeMap又是红黑树结构(自平衡的二叉树结构)
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 异常类名() :匿名对象的方式)
面试题:
throws和throw的区别?
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表示不包含