集合框架基础知识点

来源:互联网 发布:淘宝销量排行榜怎么看 编辑:程序博客网 时间:2024/04/29 07:54

作为一个真正的程序员,首先应该尊重编程,热爱你所写下的程序,他是你的伙伴,而不是工具。


第一篇博客会写集合框架,说实话我也想不到,刚好今天刚学完集合框架,所以想趁热打铁,这篇博客就这样诞生了。

这只是基础知识点,以后学会相关难点会再补充。

先贴一张简略集合框架相关图


这部分相关接口和类在Java.util 包中

这里面有4个接口分别是 Collection ,Set , List , Map 接口  Collection是相当于Object一样的上层接口 其他的就是继承与它的子接口  使用框架时尽量用多态(父类引用指向子类对象)比如使用ArrayList

Collection<E> c = new ArrayList<>();  

c.add(E e);



好处是以后想用 LinkedList 时可以直接改,不用改变下面方法,因为下面方法只有Collection的没有ArrayList独有的。

 Collection接口的方法如下  (JDK1.6的API)



Set  中对象是无序的且不能重复(equals)

List  中对象是有序的且可重复    


Array   数组  查找快  添加删除对象慢    (本来就有下标值 , 添加删除时 移动大量对象 )

Linked   链表    查找慢    添加删除对象快    (用指针相连接   查找得一个个查, 添加删除 改动相应指针就好)

Hash   前两者之间


Map  有键(名)值 (可以看成索引和内容),   键值(键和值)不能重复   , 相关方法



Map例子程序

import java.util.*;
public class TestMap {
public static void main(String[] args) {


Map<String, Integer> map = new HashMap<>();
Map<String, Integer> map1 = new TreeMap<>();


map.put("a", 1);                       //自动把1打包成对象  必须放入对象
map.put("b", 2);
map.put("c", 3);
map1.put("A", 1);
map1.put("B", 2);


System.out.println(map.size());
System.out.println(map);
System.out.println(map.containsKey("a"));
System.out.println(map1.containsValue(1));


if(map.containsKey("a")) {
int i = map.get("a");                    //自动解包  Integer自动解包
System.out.println(i);
}


Map map2 = new HashMap(map);
map2.putAll(map1);
System.out.println(map2);
}
}

输出:

3
{a=1, b=2, c=3}
true
true
1
{a=1, A=1, b=2, B=2, c=3}



Iterator    迭代器 :  用来遍历集合的接口

使用遍历集合场景  c是上面定义的

Iterator<E> i = c.iterator<>();        //用iterator() 方法就可以不用在类前面实现 Iterator 接口

while(i.hasNext()) {

i.next();

}



Collections类     它提供了提供了一些静态方法实现基于  List   容器的相关算法 



使用排序和洗牌方法 如下

Collections.sort(c);

Collections.shuffle(c);


如果是一些自定义的类如(Student,Dog类) 控制排序方法就得实现Comparable接口(此接口在lang包中不用implements),实现compareTo()方法 



例子如下

import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

public class Test implements Comparable<Test>{
private String firstName;  //定义名字的名
private String lastName;   //定义名字的姓

public Test(String firstName, String lastName) {  //构造方法
super();
this.firstName = firstName;
this.lastName = lastName;
}

@Override
public String toString() {   //输出对象的方法
return firstName +"," +lastName ;  
}


public int compareTo(Test t) {
int a = lastName.compareTo(t.lastName);    //先比较姓  字符串有自己的compareTo方法 
return(a != 0 ? a : firstName.compareTo(t.firstName));  //如果姓比较完等于0再比较名 ,不等于0就返回a
}

public static void main(String[] args) {
List c = new LinkedList<>();
c.add(new Test("cbc","bc"));
c.add(new Test("bac","bc"));
System.out.println(c);
Collections.sort(c);
System.out.println(c);
}
}

输出:

[cbc,bc, bac,bc]
[bac,bc, cbc,bc]



第一篇博客就这样结束了,写完了虽然身体很累但是心不累,我想这大概就是当程序猿的一种乐趣 。

中间也许会有些不好的地方和错误 , 大家发现了多多提出 ,必然好好改进!












 

0 0
原创粉丝点击