Thinking in java 个人笔记4
Ø 范性:如ArrayList<Apple> a=new ArrayList<Apple>();List类型有size(),add(),get()
Ø java容器类:常用集合类的继承关系
Collection<--List<--Vector
Collection<--List<--ArrayList
Collection<--List<--LinkedList
Collection<--Set<--HashSet
Collection<--Set<--HashSet<--LinkedHashSet
Collection<--Set<--SortedSet<--TreeSet
Map<--SortedMap<--TreeMap
Map<--HashMap <--LinkedHashMap
一、 几个常用类的区别
1.ArrayList:元素单个,效率高,多用于查询
2.Vector:元素单个,线程安全,多用于查询
3.LinkedList:元素单个,多用于插入和删除
4.HashMap:元素成对,元素可为空
5.HashTable:元素成对,线程安全,元素不可为空
6.Array是基于索引(index)的数据结构,List是一个有序的集合继承于conllection
LinkedList每一个节点(node)包含如下信息1,节点本身的数据(data)2,下一个节点的信息(nextNode)
TreeMap:firstKey(),lastKey(),put(key,value),get(key)
Collections类的静态方法:binarySearch(折半查找),sort(排序),reverse(逆序操作),swap(交换)
Arrays类的静态方法:fill(给数组赋值),sort(生序排序),equals(比较数组中的元素是否相等),binarySearch(折半查找)
ü collection是一个集合接口,collections是包装类含有多个静态方法不能实例化;
ü 添加一组元素:Collection<Integer> con=newArrayList<Integer>(Arrays.asList(1,2,3,4,5));//把一个数组转换为list,对象类型
Integer[]a={1,2,3,4,5};
con.addAll(Arrays.asList(a));
ü Arrays.toString(a)//输出数组;list.toString()//List类型输出
ü Map:HashMap拥有最快的查找技术,TreeMap按照比较结果生序保存键,LinkedHashMap按插入顺序保存键同时还拥有HashMap的查询速度
ü List:ArrayList(优于随机访问),LinkedList(优于插入删除)
List的一些方法:add(),remove(下标),contains();addAll(Conllection),indexOf()->取出下标,subList(a,b)->截取a<=?<b,set(index,value)->替换,clear()->清空,isEmpty(),
ü 迭代器:不重写代码就可以应用于不同容器;Iterator:有next(),hashNext(),remove()方法
ü ListIterator是一个更加强大的Iterator的子类型,可以双向移动;具有前后索引,hashNext()和hasPrevious(),pets.ListIterator(3)来创建一个一开始就指向列表索引为n的迭代,set()方法来替换
ü LinkedList:和ArrayList一样实现了List接口,getFirst()==element()->获取第一个数,如果为空则抛出异常peek()获取第一个数,空则不抛出异常;removeFirst(),remove()一样,删除并返回列表第一个数,若空则抛出异常,poll()不抛出异常;addFirst(),add()效果一样,插入第一个位置;addLast()插入尾部;removeLast()删除并返回最后一个数;
ü LinkedList可以实现Stack/Queue的全部功能:push->pop->peek()->empty()->toString()
ü Set:不保存重复的元素;HashSet专门针对查找->使用散列;TreeSet将元素存储在红黑树中并实现排序;LinkedHashMap也是使用散列进行存放;Collections.addAll(set1,”a,b,c,d”.split(“,”))生成set;set1.contains(“a”)来验证归属性,set1.containsAll(set2)是否与集合相匹配;按照字母排序Set<String>set=new TreeSet<String>(String.CASE_INSENSITIVE_ORDER)
ü Map:map.put(r,freg==nll?1:freg+1)可以在里面用表达式,get();HashMap可以使用Integer的引用(不能使用基本类型的容器);containsKey(),containsValue()来验证归属性;也可以扩展到多维:Map->Map<Person,List<Pet>>;
ü PriorityQueue:优先级队列可以确保调用peek(),poll(),remove()方法时获取的元素将是队列中优先级最高的;
ü Collection是描述所有有序列容器的共性的根接口;用迭代器而不是collection来表示容器之间的共性;实现了collection就意味着需要提供interator接口;
ü Foreach可以应用于任何Collection对象,map.entrySet()将产生一个Map.Entry类型的set且此set是Interable类型的;
ü 数组和List都是排好序的容器,List可以自动扩容;
ü 需要大量随机访问就使用ArrayList,要进行频繁插入,删除操作就用LinkedList;
ü Set不接受重复元素,HashSet提供最快的查询速度,TreeSet始终保持排序,LinkedHashSet以插入顺序保持元素;
ü 新程序中不应该使用过时的vector,HashTable,Stack;
ü 异常:定义新异常继承Exception->getMessage();
ü 栈轨迹:printStackTrace()方法所提供的信息可以通过getStackTrace()方法来直接访问;static f()->catch(Exception e){for(StackTraceElemetst:e.getStackTrace)->st.getMethodName()};
在其他函数或者主函数调用,返回函数调用的顺序
ü 重新抛出异常:catch{…throw e;};重新抛出异常会把异常抛给上一级的处理程序,其他catch会被忽略;如果只是把当前异常对象重新抛出,那么printStackTrace()方法显示的将是原来异常的抛出点调用栈信息,而非重新抛出点的信息,调用fillStackTrace()就可以成为异常的新发生地;
ü Throwable这个java类被用来表示任何可以作为异常被抛出的类;
ü Finally:主要用来清除打开的文件或者网络资源,在屏幕上画的图形,或者是外部的开关
ü 异常匹配:在抛出异常的时候,异常处理系统会按照代码的书写顺序来找出“最近”的处理程序,找到匹配的处理程序后,就认为异常将得到处理,然后不再继续查找;派生类可以匹配基类的处理程序catch(Animal e){..}catch(Cat e)