Java学习日记17——集合、泛型

Java学习日记17——集合、泛型

分类

Collection接口:两个子接口
List:记录元素的保存顺序,且可以有重复的元素
Set:不保存记录元素的顺序,且没有重复的元素
Map接口:即映射,键-值对的集合
接口

collection接口的方法:

add();//添加元素,返回布尔
remove();//删除元素,返回布尔
size();//获得大小,返回int
isEmpty();//判断是否为空,返回布尔
contains();//判断是否包含某个元素,返回布尔
iterator();//遍历,返回iterator

list接口:线性表

主要实现类是ArrayList和LinkedList,以及早期的Vector,相对于前面collection父类而言,包含的方法包括:

List<Integer> list = new ArrayList<>();//定义新列表,尖括号表示列表类型,后一个尖括号可以省略
get(index);
set(index,element);
add(index,element)
remove(index);
indexOf(object o);

Iterator迭代器,所有的collection都可以产生,Java1.5以后很多实用增强for循环来实现。举个例子:

for(Photo photo :album){//元素类型 元素名:遍历的列表名
	System.out.println(photo.toString());//对每个元素名的操作
}

栈Stack:先进后出

栈中包含的三个方法分别是:

public Object push(Object item);//将指定元素圧入栈中
public Object pop();//将栈最上面的元素取出,并且返回对象
public boolean empty();//判断是否为空

举个例子:

		Stack<Integer> q = new Stack<>();
		for (int i = 0;i<5;i++)
			q.push(i);
		while(! q.isEmpty())
			System.out.println(q.pop());

输出结果:

4
3
2
1
0

队列Queue:先进先出

queue的重要实现是LinkedList类,方法:

方法可抛出异常的返回元素的
insert():插入add()offer()
Remove():移除remove()poll():取出
Examine():检查element()peek()

举个例子:

Queue<Integer> q = new LinkedList<>();
for (int i = 0;i<5;i++)
	q.offer(i);
while(! q.isEmpty())
	System.out.println(q.poll());

输出结果:

0
1
2
3
4

其他类和接口

Vector 现在多用ArrayList:相当于动态数组
Stack 现在多用LinkedList:Stack是Vector的子类
Hashtable 现在多用HashMap:用Hashtable实现Map接口
Enumeration 现在多用Iterator

Set和Map

Set集:两个重要的实现HashSet和TreeSet,其中TreeSet底层是TreeMap实现,Set中对象不重复。常用的方法有add(),和contain()。

Map:map是键-值对的集合,主要实现类是HashMap和TreeMap类(红黑树算法实现),常用的方法put()放入键值对,get(key)得到value,entrySet(),KeySet(),values()。Map.Entry是一个嵌套接口。

排序和查找

对于排序,Java中已经集成了相关的排序方法,可以直接使用,当然你也可以自己写。

Array类

array类提供了sort()排序和binarySearch()二分法查找方法。在查找前应该先调用sort进行排序。

		String[] s = new String[]{"aslc","nwei", "65dk","dskj"};
        Arrays.<String>sort(s);
        for (String i:s
        ) {
            System.out.println(i);
        }

执行结果是:

65dk
aslc
dskj
nwei
比较

java.lang.Comparable实现方法是:public int compareTo(Object obj)
java.lang.Comparator实现方法是:public int compare(T o1,T o2);

Collection类

同样也有sort和binarySearch()方法,还有reverse()反转方法。

泛型

使用泛型可以针对不同的类有相同的处理方式。在有泛型的情况下类型更安全,能确保内部类型都一致。而且使用更广泛,针对不同的类可以有相同的处理方式。用<…>来表示,中间可以是各种数据类型。例如 List<.String> s= new List<>()。

泛型可以针对类,也可以是针对方法的,针对类时放在后面,而针对方法时放在方法前面。

对于类型的限定:
使用 :在collection中的reverse方法,reverse(List<?>list),问号这里指代任意类型。
使用 extends:在set里面的addAll方法,addAll(collection<? extends E>col)
使用 super:在collection中的fill方法,fill(List<? super T>T obj)。可以理解为在水果类列表中可以添加苹果香蕉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值