集合collection 2016 1 22

来源:互联网 发布:张无忌武功排名知乎 编辑:程序博客网 时间:2024/05/17 16:55
集合的一些技巧
1、需要唯一吗?
需要  set 
需要顺序吗? 
需要 treeSet  不需要 hashSet 
不需要 list
需要频繁增删吗?
需要 linkedlist     不需要 ArrayList

2、如何记录每一个容器的结构和所属体系那?
看名字
list 
|--- ArrayList 
|--- LinkList
Set
|--- HashSet
|---TreeSet
后缀名就是所属集合的体系
前缀名就是所属集合的数据结构

看到array,想到数组,有角标,查询快
看到link,想到链表,增删快,add get removefirst removelast 
看到hash 就要想到哈希表,想到唯一性,就要想到元素要覆盖hashcode() 方法 和equals()方法
看到tree,就要想到二叉树,想到要排序,想到排序的两个接口,compareable 和 comparetarator

而且通常这些常用的集合都是不同步的 

-------------------------------------------------------------------------------------------------

集合中泛型的通配符的使用

通配符 ? 可以对类型进行限定

上限: ? extends e : 接受e类型的或e的子类性对象

下限: ? super  E: 接收E类型,或E的父类型

一般在存储元素的时候都使用上限,因为这样在取出元素的时候,都是按照上限类型来运算的,不会出现类型安全隐患

如下是上限类型的演示:

package com.it.cast.p5.genercdefinedemo;
public class Person2 {


private String name;
private int age;
public Person2(String name,int age){
this.age = age;
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "age" + age + " name" + name;
}
}

package com.it.cast.p5.genercdefinedemo;

public class Worker extends Person2{


public Worker(String name, int age) {
super(name, age);
// TODO Auto-generated constructor stub
}
}

package com.it.cast.p5.genercdefinedemo;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class PrintCollection {
public static void main(String[] args) {
ArrayList <Person2> arr = new ArrayList <Person2>();
arr.add(new Person2("好人",23 ));
arr.add(new Person2("坏人",24));
print (arr);
ArrayList<Worker> arr2 = new ArrayList<Worker>();
arr2.add(new Worker("肌肉男", 25));
arr2.add(new Worker("佰砖", 34));
print ( arr2);
}
/*一般在存储元素的时候都是用上限,因为这样在取出元素的时候都是按照上限类型
* 来运算的,不会出现类型转换问题
* */
public static void print(Collection<? extends Person2> a1){
Iterator<? extends Person2> a = a1.iterator();
while ( a.hasNext()){
Person2 p = a.next(); //进入的都是Person类型的或其子类,都可以用父类来接收
System.out.println(p);//叫做泛型的应用
}
}
}


1 0