读书人

ThinkingInJava握有对象(Holding Your

发布时间: 2012-12-24 10:43:14 作者: rapoo

ThinkingInJava持有对象(Holding Your Objects)读后总结

闲来无事,项目做多了感觉基础弱了好多,业余时间仔仔细细阅读了一遍thinkinginjava4(集合基础篇章),跑完每个Sample,写完每个Ex,总结下其中一些心得,收获不少,后续还会补上其它章节心得~~~~

?

?

1.如果不需要使用每个元素的索引,你可以使用foreach语法来选择List中的每个元素

?

2.?

List<Apple> apples = new LinkedList<Apple>(); //无法使用LinkedList中getFirst(),getLast()等之类的

这种方式并非总能奏效,因为某些累具有额外的功能。如果你需要使用这些方法,不能将他们向上转型为更通用的接口。

?

3.填充容器(Collection)和数组(Array)

 //填充容器public Collection<String> fill(Collection<String> c, int n){        for(int i=0; i<n; i++){c.add(this.next());        }        return c;}//填充数字public void fillAll(String[] ary){        for (int i = 0; i < ary.length; i++) {               ary[i] = this.next();        }}

?

4.添加一组元素

?

Arrays.asList(...)//变参

Collections.addAll()

Arrays.<Snow>asList(...);

?

?List list = new ArrayList(Arrays.asList(elements))

==ist.addAll(Arrays.asList(elements))

== Collections.addAll(list, "Peaches 'n Plutonium", "Rocky Racoon")

?

5.Arrays.asList(array);其返回类型为java.util.Arrays.ArrayList?------Arrays的内部类

String [] array = new String[]{"a","b","c","d","e"};List<String> list = new ArrayList<String>();List<String> subList = null;list = Arrays.asList(array);print("1:" + list);subList = list.subList(1, 3);print("2:" + subList);List<String> copy = new ArrayList<String>(list);copy.removeAll(subList);print("3:" + copy);

?

6.List类型的可以调用迭代器ListIterator

利用ListIterator逆序输出

?

List<Integer> list1 = new ArrayList<Integer>(Arrays.asList(3,4,5,6,7));ListIterator<Integer> listIter = list1.listIterator(list1.size());//起始索引位List<Integer> list2 = new ArrayList<Integer>();while(listIter.hasPrevious()){list2.add(listIter.previous());}for (Integer integer : list2) {System.out.println(integer);}
?

?

7.String.CASE_INSENSITIVE_ORDER?//Comparator<String>对象 对字符串排序

?? 默认字符串排序方式是敏感的,此常量返回一个不敏感大小写的Comparator类型

Set<String> words = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);//参数为Comparator类型words.addAll(new TextFile("src/com/mindviewinc/chapter11/sample/collection/SetOperations.java", "\\W+"));System.out.println(words);

?

?

8.Set应用

计算单词中的元音字母个数

?

public void vowelCounter(Set<String> st) {Set<Character> vowels = new TreeSet<Character>();Collections.addAll(vowels, 'A', 'E', 'I', 'O', 'U', 'a', 'e', 'i', 'o', 'u');int allVowels = 0;for(String s : st) {int count = 0;for(Character v : s.toCharArray()) {//toCharArray字符串转化为char[]if(vowels.contains(v)) {count++;allVowels++; }}System.out.print(s + ": " + count + ", ");}System.out.println();System.out.print("Total vowels: " + allVowels);}

?

9.Map 统计数量

map.put(c, (map.get(c)!=null?map.get(c):1) + 1);

?

10.List排序

Collections.sort(words, String.CASE_INSENSITIVE_ORDER);

如果该list已经排序迭代的时候,再插入其他集合时候可以用LinkedHashMap,保留其插入顺序

?

11.Set 排序

?

Set<String> keySet =map.keySet();

?

抛出异常

返回特殊值

插入

add(e)

offer(e)

移除

remove()

poll()

检查

element()

peek()

?

13.PriorityQueue

按优先级出队列

?

打印队列中内容

?

while(pq.peek() != null)System.out.print(pq.poll() + " ");
?

?

PriorityQueue pq = new PriorityQueue();pq.offer(new User());pq.offer(new User());//com.mindviewinc.chapter11.exercise.User cannot be cast to java.lang.Comparable
?

class PetSequence {protected Pet[] pets = Pets.createArray(8);}public class Ex32 extends PetSequence implements Iterable<Pet>{public Iterator<Pet> iterator() {//实现一个不是Collection的外部类时,使用Iterator就会变得非常吸引人return new Iterator<Pet>() {private int index = 0;public boolean hasNext() {return index < pets.length;}public Pet next() {return pets[index++];}public void remove() { // Not implementedthrow new UnsupportedOperationException();}};}public Iterable<Pet> reversed() {//Iterable不是Iteratorreturn new Iterable<Pet>() {public Iterator<Pet> iterator() {return new Iterator<Pet>() {int index = pets.length - 1;public Pet next() {return pets[index--];}public boolean hasNext() {return index >= 0;}public void remove() {throw new UnsupportedOperationException();}};}};}public static void main(String[] args) {Ex32 ex = new Ex32();for (Pet pet : ex.reversed()) {//利用foreach逆序System.out.println(pet);}for (Pet pet : ex) {System.out.println(pet);}}}

?

16.

String[] strs = {"1","2","3","4","5","6","7","8","9","10"};//List<String> list = Arrays.asList(strs);List<String> list = new ArrayList<String>(Arrays.asList(strs));//深拷贝Collections.shuffle(list);PPrint.pprint(list);PPrint.pprint(strs);?

?

?

?

?

?

?


?

?

?

?

?

?

?

?

?

读书人网 >编程

热点推荐