java学习---集合框架

java泛型是伪泛型因为编译成功后的class文件是没有泛型的
泛型的好处:安全、将错误由编译时期提前到了运行时期

集合框架之List接口:

List接口特点:有序、索引、可以重复元素
	实现类ArrayList,LinkedList
List接口特有的方法,即带有索引的功能
add():在指定的索引添加数据,注意越界异常
remove():移除指定索引上的元素,同时返回被删除前的元素
set():修改指定索引上的元素

迭代器的并发异常:

在遍历的过程中,使用了集合方法修改了集合的长度,这是不允许的,因为在List遍历的过程中,指针是一直向前移动的,遍历过程中不可能因为添加了元素而使指针回退重新遍历,这是不可能的!!!

如下案例:

public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		list.add("abc1");
		list.add("abc2");
		list.add("abc3");
		list.add("abc4");
		Iterator<String> it = list.iterator();
		while(it.hasNext()){
			String s = it.next();
			if(s.equals("abc3")){
				list.add("ABC3");
			}
			System.out.println(s);
		}
	}

注意,最后会引起Exception in thread “main” java.util.ConcurrentModificationException,并发修改异常
该程序是错误的操作

数据的存储结构:

堆栈:先进后出,如子弹压入弹夹

队列:先进先出,如安检

数组:特点查找元素快,增删元素慢(慢的原因是数组是定长的)

链表:多节点之间采用地址进行连接,查找速度慢,增删速度快

ArrayList特点:查找元素快,增删元素慢

LinkedList:增删速度快,查询慢,LinkedList集合数据存储的结构是链表结构,所以他提供了大量的首尾操作的方法

LinkedList特有的方法:
addFirst()添加到链表的开头
addLast()添加到链表的结尾
removeFirst
removeLast

Vector类已经被ArrayList取代了,已经没用了

Set接口:不允许存储重复对象,没索引

实现类:HashSet(哈希表)
	特点,无序集合,没有索引
    存储取出都比较快
	线程不安全,运行速度比较快
	数组长度达到12的时候就需要对数组扩容
	String类继承Object类,重写了父类的方法hashCode
	
LinkedHashSet基于链表的哈希表实现
继承自HashSet
LinkedHashSet具有顺序,存储和取出顺序相同的
线程不安全的集合,运行速度比较快
问题:
1、如果两个对象的哈希值相同p1.hashCode()==p2.hashCode()
两个对象的equals一定返回true吗?p1.equals(p1)
答案是不一定
2、如果两个对象的equals方法返回true,p1.equals(p2)==true
两个对象的哈希值一定相同吗?
答案是一定的
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章