闲来无事,项目做多了感觉基础弱了好多,业余时间仔仔细细阅读了一遍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();
Set<String>
set = new TreeSet<String>(keySet);//用TreeSet排序,TreeSet自动维护队列顺序,不用手动进行排序
Or
List<String> ss2List = new
LinkedList<String>(m.keySet());
Collections.sort(ss2List);// 转化为List进行排序
12.Queue
|
抛出异常
|
返回特殊值
|
插入
|
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
14.Collection和Iterator
当你要实现一个不是Collection的外部类时,由于让它去实现Collection接口可能非常困难或麻烦,因此使用Iterator就会变得非常吸引人。(The use of Iterator becomes
compelling when you implement a foreign class, one that is not a Collection, in
which it would be difficult or annoying to make it implement the Collection
interface.)
15.foreach和Iterator
Iterable接口被foreach用来在序列中移动,不是所有的集合类才会实现Interable接口。
例(解释14/15):
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 implemented
throw new UnsupportedOperationException();
}
};
}
public Iterable<Pet> reversed() { //Iterable不是Iterator
return 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.
List<Integer> list = new
ArrayList<Integer>(Arrays.asList(ia));//1.深拷贝,重构一个ArrayList
List<Integer> list = Arrays.asList(ia);//2.返回一个不可变的固定大小的ArrayList
如果将两个list排序,2会打乱数组ia的顺序,1则不会
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);
分享到:
相关推荐
ThinkingInJava
ThinkinginJava cn.chm
讲解java的图书
1. **面向对象编程基础**:Java是一种面向对象的语言,它支持类、对象、继承、封装和多态等基本概念。在代码库中,你可以看到如何定义和实例化类,以及如何通过继承来构建类的层次结构。 2. **异常处理**:Java提供...
根据提供的信息,“study_ThinkinginJava_”压缩包文件包含了你在阅读这本书时所做的课后练习题和笔记,这将是一个宝贵的自我学习和复习资源。 在《Thinking in Java》中,你可以找到以下关键知识点: 1. **基础...
thinkinginjava 中文 4th edition pdf
ThinkingInJava 第三版 中文
这本书中文译本的压缩文件名为"ThinkingInJava3.rar",这表明它是该书的第三版。"java;"标签进一步确认了该内容与Java编程语言紧密相关。 Java是一种广泛使用的面向对象的编程语言,它的设计目标是具有简单的语法、...
thinkingin,java,thinkinginjava,帮助文档 thinkingin,java,thinkinginjava,帮助文档 thinkingin,java,thinkinginjava,帮助文档 thinkingin,java,thinkinginjava,帮助文档 thinkingin,java,...
- 在Java中,对象作为参数传递时,实际上是传递了一个对象引用,而不是对象本身。这意味着改变参数对象的属性会影响到原始对象。 4. **引用与相等性**: - `!=` 和 `==` 运算符用于比较对象的引用是否相同,而...
ThinkinginJava 第三版 中文 习题答案
通过阅读这些章节,读者可以全面理解Java的基本语法、面向对象编程思想、异常处理机制、集合框架以及多线程和高级特性。无论你是初学者还是有经验的开发者,都能从中受益,提升自己的Java编程能力。对于那些想要深入...
ThinkinginJava3中文版和习题及答案
Java代码编译成字节码后可以在任何支持Java的平台上运行,这就是著名的“一次编写,到处运行”(Write Once, Run Anywhere)特性。 在《Thinking in Java》的学习过程中,你会接触到以下核心知识点: 1. **基础...
java学习笔记(ThinkinginJava).pdf