java集合

java集合

一.  Collection接口

小编新手,java才开始学,各路大神多多指正,感激不尽。
首先上一张图吧,这张图截自一位博主大神,这张图可以将java集合框架及其内部元素间的关系清晰地呈现出来。

这里需要注意的是,Collection提供一个接口,List和set两个接口都继承它,但是Map并不直接继承Collection。
其实Collection接口也是继承自另一个接口,叫迭代接口Iterable。
我们可以在eclipse中产看Collection向上继承和向下扩展的一些信息,截图如下:
1.  Collection向上继承自Iterale
2.  Colletion向下扩展的类和接口,截图如下:

由上面的图我们可以看到左边一列是Collection的子接口或实现它的子类,可以看到划红线的List,Set均继承自Collection;右边一列是Collection中定义的一些方法。

二.  List接口(继承自Collection)

同样的先上图后解释:


同样,我们看左边一列,是List下的子类以及子接口,其中包括ArrayList,LinkedList以及Vector;再看右边一列是List接口中定义的一些方法。
下面我们讨论一下List下三个实现类的特性:
ArrayList:
类似于数组般线性存储,只不过该数组可以动态改变大小,且每次扩容算法为:原长度*3/2 + 1,也即扩大原来的50%。因为类似数组,所以随机访问效率高,但是删除插入操作效率低,所以不适用与频繁删除插入操作。
细节知识:
1.  ArrayList是线程不安全的,所以多线程情况下不要选用该列表,可以选用vector.
2.  ArrayList有多种遍历方式,如下代码实例:
package ColletionTest;
import java.util.ArrayList;
import java.util.Iterator;

public class MainTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ArrayList<String> names = new ArrayList<String>();
		System.out.println(names.size());
		names.add("chenfang");
		names.add("sjj");
		names.add("xiaoming");
		names.add("xiaohua");
		/*下面是几种主要的遍历方式*/
		/*方法一*/
		for(int i=0;i<names.size();i++){
			System.out.println(names.get(i));
		}
		/*方法二*/
		for(String tmp : names){
			System.out.println(tmp);
		}
		/*方法三*/
		String[] tmps = new String[names.size()];
		names.toArray(tmps);
		for(int i=0;i<tmps.length;i++){
			System.out.println(tmps[i]);
		}
		/*方法四*/
		Iterator<String> it = names.iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}
	}
}

LinkedList:

LinkedList也是一个线性表,其实现用的是双向循环链表,所以删除插入效率高,而随机访问效率低,频繁使用删除插入操作时可选用该链表。

细节知识:

1. 主要是LinkedList和ArrayList的区别,各自的内部实现机理,各自使用的情况等,参见上面表述。

2. LinkedList不是线程安全的,所以多线程环境下需要用synchronized关键字实现同步。

3. 遍历方法可以是for(Object tmp : variable),也可以是先转换为数组后按数组方式遍历,还可以是迭代器方式,和ArrayList差不多。


Vector

和ArrayList差不多,可以说是ArrayList的线程安全替代版。


三.  Set接口



Set和List接口不同的一点是,不允许元素重复出现,最多出现一个null类型元素,这和集合的定义是一样的。那么实现Set接口的类中,常见的有HashSet,LinkedHashSet,TreeSet。
细节知识:
1.  HashSet用HashMap实现。
2.  LinkedHashSet用LinkedHashMap实现。
3.  TreeSet底层使用红黑树实现,插入的元素会按大小插入相应的位置;另外,他是用HashMap实现的。

四.  Map接口



Map接口没有继承Collection接口,但是Collection中的Set接口下的一些集合类实现时,底层使用到了Map接口下的一些类的,在Set接口那一小节已经说过了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值