集合框架中Collection接口

集合框架中Collection接口

一、Java中集合框架的体系结构
集合框架—java做好的用来管理乱七八糟的一堆数据的java类库
集合----[乱七八糟的一堆]
框架—做好的java类库
在这里插入图片描述
二、Collection接口与Map接口的区别

Collection接口Map接口
处理单例数据的顶级接口处理键值对数据的顶级接口
可以使用Iterator迭代器接口遍历集合没有Iterator迭代器接口

三、List接口与Set接口的区别

List接口Set接口
有序无序
可以有重复数据不能有重复数据,指重复的数据算一个

四、ArrayList类和LinkedList类的用法

ArrayList类:

ArrayList类定义----public class ArrayList

构造方法:
1.ArrayList() 构造一个初始容量为10的空列表。

2.ArrayList(Collection c) 通过一个实现Collection 接口的子类/子接口对象创建一个列表

3.ArrayList(int initialCapacity) 构造具有指定初始容量的空列表。
例如:

package com.ArryList.java;
import java.util.ArrayList;
public class Test {
	public static void main(String[] args) {
		//1.ArrayList() 构造一个初始容量为10的空列表。
		ArrayList st = new ArrayList();
		//2.ArrayList(Collection c) 通过一个实现Collection 接口的子类/子接口对象创建一个列表
		ArrayList st2 = new ArrayList(st);
		//3.ArrayList(int initialCapacity) 构造具有指定初始容量的空列表。
		ArrayList st3 = new ArrayList(50);
	}
}

实例方法:
1.boolean add(Object o) 将指定的元素追加到此列表的末尾。

2.boolean contains(Object o) 如果此列表包含指定的元素,则返回 true 。

3.Object get(int index) 返回此列表中指定位置的元素。

4.int indexOf(Object o) 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。

5.int lastIndexOf(Object o) 返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。

6.Object remove(int index) 删除该列表中指定位置的元素。

7.boolean remove(Object o) 从列表中删除指定元素的第一个出现。

8.Object set(int index, Object element) 用指定的元素替换此列表中指定位置的元素。

9.int size() 返回此列表中的元素数。

10.boolean isEmpty() 如果此列表不包含元素,则返回 true 。

11.void clear() 从列表中删除所有元素。

12.Iterator iterator() 以正确的顺序返回该列表中的元素的迭代器。
例如:

package com.ArryListfangfa.java;
import java.util.ArrayList;
import java.util.Iterator;
public class Test {
	public static void main(String[] args) {
		//创建ArrayList集合
		ArrayList st = new ArrayList();
		//1.boolean	add(Object o) 将指定的元素追加到此列表的末尾。
		st.add("Hello");
		st.add(2000);
		st.add(false);
		st.add(6.66);
		st.add("Hello");
		//2.boolean	contains(Object o) 如果此列表包含指定的元素,则返回 true 。 
		System.out.println("是否存在=="+st.contains(7.77));
		//3.Object 	get(int index) 返回此列表中指定位置的元素。
		System.out.println("元素=="+st.get(1));
		//4.int	indexOf(Object o) 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。
		System.out.println("‘Hello’第一次出现的位置=="+st.indexOf("Hello"));
        //5.int	lastIndexOf(Object o) 返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。 
		System.out.println("‘p’最后一次出现的位置=="+st.lastIndexOf("p"));
		//6.Object 	remove(int index) 删除该列表中指定位置的元素。 
		st.remove(3);
		System.out.println(st.indexOf(6.66));
		//7.boolean	remove(Object o) 从列表中删除指定元素的第一个出现
		st.remove("Hello");
		System.out.println(st.indexOf(1));
		//8.Object 	set(int index, Object  element) 用指定的元素替换此列表中指定位置的元素。 
		st.set(st.indexOf(false), true);
		System.out.println(st.get(st.indexOf(true)));
		//9.int	size() 返回此列表中的元素数。 
		System.out.println("元素数=="+st.size());
		//10.boolean	isEmpty() 如果此列表不包含元素,则返回 true 。
		System.out.println("是否包含元素=="+st.isEmpty());
		//11.void	clear() 从列表中删除所有元素。 
		st.clear();
		System.out.println("是否包含元素=="+st.isEmpty());
		//12.Iterator<E>	iterator() 以正确的顺序返回该列表中的元素的迭代器。
		Iterator a=st.iterator();
	}
}

执行结果:
在这里插入图片描述
遍历ArrayList:
例如:

package com.bianli;
import java.util.ArrayList;
import java.util.Iterator;
public class Test {
	public static void main(String[] args) {
		ArrayList st = new ArrayList();
		st.add("Hello");
		st.add(3000);
		st.add(false);
		st.add(8.88);
		//普通for循环
		for(int i = 0;i <st.size();i++ ) {
			System.out.println(st.get(i));
		}
		System.out.println("_______________");
		//增强fo循环
		for(Object o:st) {
			System.out.println(o);	
		}
		System.out.println("_______________");
		//迭代器
		Iterator or = st.iterator();
		while(or.hasNext()) {
			System.out.println(or.next());
		}
	}
}

执行结果:
在这里插入图片描述
LinkedList类

LinkedList类定义----public class LinkedList

构造方法:
1.LinkedList() 构造一个空列表。

2.LinkedList(Collection c) 通过一个实现Collection 接口的子类/子接口对象创建一个列表
例如:

package com.LinkedList.java;
import java.util.ArrayList;
import java.util.LinkedList;
public class Test {
	public static void main(String[] args) {
		//1.LinkedList() 构造一个空列表。
		LinkedList ked = new LinkedList();
		//2.LinkedList(Collection c) 通过一个实现Collection 接口的子类/子接口对象创建一个列表
		LinkedList ked2 = new LinkedList(ked);
		//Collection参数的构造方法可以用来进行集合类之间的转换
		ArrayList st = new ArrayList();
		LinkedList ked3 = new LinkedList(st);	
	}
}

实例方法:
1.boolean add(Object o) 将指定的元素追加到此列表的末尾。

2.boolean contains(Object o) 如果此列表包含指定的元素,则返回 true 。

3.Object get(int index) 返回此列表中指定位置的元素。

4.int indexOf(Object o) 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。

5.int lastIndexOf(Object o) 返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。

6.Object remove(int index) 删除该列表中指定位置的元素。

7.boolean remove(Object o) 从列表中删除指定元素的第一个出现(如果存在)。

8.Object set(int index, Object element) 用指定的元素替换此列表中指定位置的元素。

9.int size() 返回此列表中的元素数。

10boolean isEmpty() 如果此列表不包含元素,则返回 true 。

11.void clear() 从列表中删除所有元素。

12.Iterator iterator() 以正确的顺序返回该列表中的元素的迭代器。
对第一个元素和最后一个元素的操作方法:

13.void addFirst(Object e) 在该列表开头插入指定的元素。

14.void addLast(Object e) 将指定的元素追加到此列表的末尾。

15.Object getFirst() 返回此列表中的第一个元素。

16.Object getLast() 返回此列表中的最后一个元素。

17.Object removeFirst() 从此列表中删除并返回第一个元素。

18.Object removeLast() 从此列表中删除并返回最后一个元素。
例如:

package com.LinkedListfangfa.java;
import java.util.Iterator;
import java.util.LinkedList;
public class Test1 {
	public static void main(String[] args) {
		//创建LinkedListList集合
		LinkedList ked = new LinkedList();
		//1.boolean	add(Object o) 将指定的元素追加到此列表的末尾。
		ked.add("Hello");
		ked.add(5000);
		ked.add(true);
		ked.add(8.88);
		ked.add("Hello");
		//2.boolean	contains(Object o) 如果此列表包含指定的元素,则返回 true 。
		System.out.println(ked.contains(true));
		//3.Object 	get(int index) 返回此列表中指定位置的元素。
		System.out.println(ked.get(2));
		//4.int	indexOf(Object o) 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。
        System.out.println(ked.indexOf(8.88));
        //5.int	lastIndexOf(Object o) 返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。 
        System.out.println(ked.lastIndexOf("Hello"));
		//6.Object 	remove(int index) 删除该列表中指定位置的元素。
        ked.remove(3);
        System.out.println(ked.indexOf(8.88));
        //7.boolean	remove(Object o) 从列表中删除指定元素的第一个出现
        ked.remove("Hello");
        System.out.println(ked.indexOf(0));
        //8.Object 	set(int index, Object  element) 用指定的元素替换此列表中指定位置的元素。 
        ked.set(ked.indexOf(true),false);
        System.out.println(ked.get(ked.indexOf(false)));
        //9.int	size() 返回此列表中的元素数。 
        System.out.println(ked.size());
        //10.boolean	isEmpty() 如果此列表不包含元素,则返回 true 。
        System.out.println(ked.isEmpty());
        //11.void	clear() 从列表中删除所有元素。 
        ked.clear();
        System.out.println(ked.size());
        //12.Iterator<E>	iterator() 以正确的顺序返回该列表中的元素的迭代器。
      	Iterator a=ked.iterator(); 
        //13.void	addFirst(Object e) 在该列表开头插入指定的元素。 
      	ked.addFirst("World");
      	//14.void	addLast(Object  e) 将指定的元素追加到此列表的末尾。
      	ked.addLast("Hello");
      	//15.Object 	getFirst() 返回此列表中的第一个元素。 
      	System.out.println(ked.getFirst());
      	//16.Object 	getLast() 返回此列表中的最后一个元素。
    	System.out.println(ked.getLast());
    	//17.Object 	removeFirst() 从此列表中删除并返回第一个元素。
    	System.out.println(ked.removeFirst());
    	System.out.println(ked.size());
    	//18.Object 	removeLast() 从此列表中删除并返回最后一个元素。 
    	System.out.println(ked.removeLast());
    	System.out.println(ked.size());
	}
}

执行结果:
在这里插入图片描述
总结:
因为ArrayList是动态数组结构,他在查找第一个元素和最后一个元素的时很麻烦,而LinkedList采用的是双向链表结构,这种结构在查找第一个元素和最后一个元素的时候是最快的。就像一列火车我们眼前驶过,我们可能不知道这列火车由几节车厢组成,但是我们一定会在第一时间看清第一节与最后一节车厢位置。所以LinkedList会比ArrayList多出一组对第一个元素和最后一个元素的操作方法
遍历LinkedList:

package com.LinkedLastbianli.java;
import java.util.Iterator;
import java.util.LinkedList;
public class Test {
	public static void main(String[] args) {
		LinkedList ked = new LinkedList();
		ked.add("Hello");
		ked.add(6000);
		ked.add(true);
		ked.add(6.66);
		//for循环
		for(int i = 0;i<ked.size();i++) {
			System.out.println(ked.get(i));
		}
		System.out.println("_______________");
		//增强for循环
		for(Object o:ked) {
			System.out.println(o);
		}
		System.out.println("_______________");
		//迭代器
		Iterator tor = ked.iterator();
		while(tor.hasNext()){
			System.out.println(tor.next());
		}
	}
}

执行结果:
在这里插入图片描述
四、ArrayList类与LinkedList类的区别

ArrayListLinkedList
动态数组结构双向链表结构
查询快 添加删除慢查询慢 添加删除快
没有提供对第一个元素和最后一个元素的操作提供了对一个元素和最后一个元素的操作
适用于大量查询操作适用于大量添加删除操作
初始容量值为10没有初始容量
每次扩展后的容量是之前的1.5倍没有扩容机制

五、HashSet类和LinkedHashSet类的用法
HashSet类

HashSet类定义–public class HashSet 此类实现Set接口 由哈希表支持

HashSet中保存的元素是没有顺序,重复的元素算一个。

构造方法:
1.HashSet() 构造一个新的空集合; 默认初始容量(16)和负载因子(0.75)。

2.HashSet(Collection c) 构造一个包含指定集合中的元素的新集合。

3.HashSet(int initialCapacity) 构造一个新的空集合; 具有指定的初始容量和默认负载因子(0.75)。

4.HashSet(int initialCapacity, float loadFactor) 构造一个新的空集合; 具有指定的初始容量和指定的负载因子。
例如:

package com.HashSet.java;
import java.util.ArrayList;
import java.util.HashSet;
public class Test {
	public static void main(String[] args) {
		//1.HashSet() 构造一个新的空集合; 默认初始容量(16)和负载因子(0.75)。 
        HashSet set1 = new HashSet();
        //2.HashSet(Collection c) 构造一个包含指定集合中的元素的新集合。 
        HashSet set2 = new HashSet(set1);
        ArrayList st = new ArrayList();
        HashSet set3 = new HashSet(st);
        //3.HashSet(int initialCapacity) 构造一个新的空集合; 具有指定的初始容量和默认负载因子(0.75)。
        HashSet set4 = new HashSet(60);
        //4.HashSet(int initialCapacity, float loadFactor) 构造一个新的空集合; 具有指定的初始容量和指定的负载因子。 
        HashSet set5 = new HashSet(50,0.7f);
	}
}

实例方法:
1.boolean add(Object e) 将指定的元素添加到此集合(如果尚未存在)。

2.boolean contains(Object o) 如果此集合包含指定的元素,则返回 true 。

3.boolean isEmpty() 如果此集合不包含元素,则返回 true 。

4.Iterator iterator() 返回此集合中元素的迭代器。

5.boolean remove(Object o) 如果存在,则从该集合中删除指定的元素。

6.int size() 返回此集合中的元素数(其基数)。

7.void clear() 从此集合中删除所有元素。
例如:

package com.HashSetfangfa.java;
import java.util.HashSet;
import java.util.Iterator;
public class Test {
	public static void main(String[] args) {
		HashSet set1 = new HashSet();
		//1.boolean	add(Object e) 将指定的元素添加到此集合(如果尚未存在)。 
		set1.add("Hello");
		set1.add(3000);
		set1.add(true);
		set1.add(6.66);
		//2.boolean	contains(Object o) 如果此集合包含指定的元素,则返回 true 。 
		System.out.println(set1.contains("Hello"));
		//3.boolean	isEmpty() 如果此集合不包含元素,则返回 true 。 
		System.out.println(set1.isEmpty());
		//4.Iterator	iterator() 返回此集合中元素的迭代器。 
		Iterator tor=set1.iterator();
		//5.boolean	remove(Object o) 如果存在,则从该集合中删除指定的元素。
		set1.remove(3000);
		System.out.println(set1.size());
		//6.int	size() 返回此集合中的元素数(其基数)。 
		System.out.println(set1.size());
		//7.void	clear() 从此集合中删除所有元素。 
		set1.clear();
		System.out.println(set1.size());
	}
}

执行结果:
在这里插入图片描述
遍历HashSet:
例如:

package com.bianli.java;
import java.util.HashSet;
import java.util.Iterator;
public class Test {
	public static void main(String[] args) {
		HashSet set =  new HashSet();
		set.add("Hello");
		set.add(3000);
		set.add(true);
		set.add(6.66);
		//增强for循环
		for(Object o:set) {
			System.out.println(o);
		}
        System.out.println("_________");
        //迭代器
        Iterator tor=set.iterator();
        while(tor.hasNext()) {
        	System.out.println(tor.next());
        }  
	}
}

执行结果:
在这里插入图片描述

LinkedHashSet类
哈希表和链表实现了Set接口,具有可预测的迭代次序。 这种实现不同于HashSet,它维持于所有条目的运行双向链表。
因为LinkedHashSet类是HashSet类的子类,因此会从父类继承集合数据的操作方法,所以只要我们会HashSet类使用,那么LinkedHashSet类不用学也会用。
构造方法:
1.LinkedHashSet() 构造一个新的空集合; 默认初始容量(16)和负载因子(0.75)。

2.LinkedHashSet(Collection c) 构造一个包含指定集合中的元素的新集合。

3.LinkedHashSet(int initialCapacity) 构造一个新的空集合; 具有指定的初始容量和默认负载因子(0.75)。

4.LinkedHashSet(int initialCapacity, float loadFactor) 构造一个新的空集合; 具有指定的初始容量和指定的负载因子。
例如:

package com.LinkedHashSet.java;
import java.util.LinkedHashSet;
public class Test {
	public static void main(String[] args) {
		//构造方法
		LinkedHashSet ls = new LinkedHashSet();
		LinkedHashSet ls1 = new LinkedHashSet(30);
		LinkedHashSet ls2 = new LinkedHashSet(60,0.8f);
	}
}

实例方法:
1.boolean add(Object e) 将指定的元素添加到此集合(如果尚未存在)。

2.boolean contains(Object o) 如果此集合包含指定的元素,则返回 true 。

3.boolean isEmpty() 如果此集合不包含元素,则返回 true 。

4.Iterator iterator() 返回此集合中元素的迭代器。

5.boolean remove(Object o) 如果存在,则从该集合中删除指定的元素。

6.void clear() 从此集合中删除所有元素。

7.int size() 返回此集合中的元素数(其基数)。
例如:

package com.LinkedHashSetfangfa.java;
import java.util.LinkedHashSet;
public class Test {
	public static void main(String[] args) {
		//创建对象
		LinkedHashSet ls = new LinkedHashSet();
		//1.boolean	add(Object e) 将指定的元素添加到此集合(如果尚未存在)。 
		ls.add("Hello");
		ls.add(true);
		ls.add(3.33);
		ls.add(2000);
		//2.boolean	contains(Object o) 如果此集合包含指定的元素,则返回 true 。
		System.out.println(ls.contains(3.33));
		//3.boolean	isEmpty() 如果此集合不包含元素,则返回 true 。 
		System.out.println(ls.isEmpty());
		//4.Iterator	iterator() 返回此集合中元素的迭代器。 
		ls.iterator();
		//5.boolean	remove(Object o) 如果存在,则从该集合中删除指定的元素。 
		ls.remove(2000);
		System.out.println(ls.size());
		//6.void	clear() 从此集合中删除所有元素。 
		ls.clear();
		System.out.println(ls.size());
		//7.int	size() 返回此集合中的元素数(其基数)。
		System.out.println(ls.size());
	}
}

执行结果:
在这里插入图片描述
遍历LinkedHashSet
例如:

package com.LinkedHashSetbianli.java;
import java.util.Iterator;
import java.util.LinkedHashSet;
public class Test {
	public static void main(String[] args) {
		//创建集合
		LinkedHashSet ls = new LinkedHashSet();
		ls.add("Hello");
		ls.add(true);
		ls.add(3.33);
		ls.add(2000);
		//增强for循环
		for(Object o:ls) {
			System.out.println(o);
		}
		System.out.println("__________");
		//迭代器
		Iterator tor =ls.iterator();
		while(tor.hasNext()) {
			System.out.println(tor.next());
		}
	}
}

执行结果:
在这里插入图片描述

六、LinkedHashSet与HashSet区别

HashSetLinkedHashSet
遍历输出时无序遍历输出时按照插入顺序输出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值