数据结构的学习历程01
集合框架
类和接口总览
ArrayList在实例化时无参数的时候,第一次add将扩容容量至10,之后每次扩容为之前的2倍,而如果有参数时,实例化将会把参数设置为容量,之后每次扩容为之前的2倍
比较器: Comparable Comparator
迭代器(进行遍历的一种方式): Iterator ListIterator
工具类: Collection Arrays
实现了 Iterable接口的类都可以用迭代器进行遍历,而实现map接口的不能使用迭代器进行遍历。
Collection
用法及用例
Collection<String> coll= new ArrayList<>();
coll.add("qqq");
coll.add("qwe");
System.out.println(coll);
System.out.println(coll.isEmpty());//判断是否为空集合
coll.remove("q");//如果有q这个元素则删除
System.out.println(coll);
System.out.println(coll.size());
Object[] elem = coll.toArray();
coll.clear();//清理
System.out.println(Arrays.toString(elem));
Map
用法及用例
Map<String,String> lit = new HashMap<>();
lit.put("磊","昨日");
lit.put("小","冷枪");
lit.put("麻","X");
lit.put("木","8");
System.out.println(lit.get("磊"));
System.out.println(lit.get("木"));
System.out.println(lit.getOrDefault("lit","涛"));
System.out.println(lit.containsKey("麻"));
System.out.println(lit.containsValue("8"));
Set < Map.Entry<String,String> > q = lit.entrySet();
for (Map.Entry<String,String> tmp : q) {
System.out.println(tmp.getKey() + " " + tmp.getValue());
}
泛型
泛型:就是规定某个类型里存储的元素都为某种类型的元素,如:
String[] 类型中只能存储String类型的元素
int[] 类型中只能存储int类型的元素
而如果我们写一个类,关于这个类型有两个对象,而我们希望第一个对象里存储的元素都为int类型,且第二个类型中的元素为String类型。此时,就要用到泛型。
class Group<T>{
public T[] elem;
public int size;
public Group(){
this.elem = (T[]) new Object[10];
this.size = 0;
}
public void add(T val){
this.elem[this.size]=val;
size++;
}
public T get (int n){
if ( n<0 ||n>=this.size) return null;
return this.elem[n-1];
}
}
public class Demo06 {
public static void main(String[] args) {
Group<Integer> lit= new Group<>();
lit.add(1);
lit.add(2);
System.out.println(lit.get(1));
}
}
泛型的优点
1、可以在编译的时候的时候,自动进行类型的检查
2、存放元素的时候,不需要强制类型转换。
3、编译的时候起作用,运行的时候被擦除
泛型的缺点
1、不能new泛型类型的数组
若要newT类型的数组则应: T[] t = (T[])new Object[];
2、简单类型不能作为泛型类型 的参数:如:int
泛型如何工作:
擦除机制:是在编译期间存在的一种机制,泛型的概念只存在在编译期间(在编译期间,将T擦除为Object,擦除不是替换)