Java中的集合与相关练习

本文介绍了Java集合框架中的核心接口和类,如Set、List、Map及其具体实现,包括它们的特点和应用场景。例如,Set不允许重复数据,HashSet无序且不允许重复,TreeSet则具备排序功能。List接口的ArrayList和LinkedList各有查询和增删速度的优势。Map接口的HashMap和TreeMap分别用于无序和有序的键值对存储。在选择集合时,应根据需求考虑元素的唯一性、排序、线程安全等因素。
摘要由CSDN通过智能技术生成

集合的概述:
集合是一系列对象的聚集。集合在程序设计中是一种重要的数据结构。在一定意义上,java中数组就是一种集合。集合实际上是用一个对象代表一组对象,在集合中的每个对象称为一个元素,集合中的元素一般都是相同的类型。
Coleection API中的接口和类主要位于java…util包中,其中最基本的接口就是Colection和Map接口。Collection接口是元素的集合,Map接口是键-值对的集合。
在这里插入图片描述
List , Set, Map都是接口,前两个继承至Collection接口,Map为独立接口
Set下有HashSet,LinkedHashSet,TreeSet
List下有ArrayList,Vector,LinkedList
Map下有Hashtable,LinkedHashMap,HashMap,TreeMap
Collection接口下还有个Queue接口,有PriorityQueue类

Set集合

set集合的几个特点:
1.set集合不允许出现重复数据
2.允许包含值为null的元素,最多只能有一个

treeset的几个特点:
1.不能有重复的元素
2.具有排序功能(底层数据结构式红黑树)
3.treeset中的元素必须实现comparable接口并重写compareTo()方法,

HashSet的几个特点
1.不能有重复值
2.无须的
3.是基于HashMap实现的

Map
Map 集合主要有:HashMap,TreeMap

HashMap特点:

1.HashMap是无序的散列映射表
2.底层实现是hash表

TreeMap特点
1.适用于按自然顺序或自定义顺序遍历键
2.底层是二叉树
3.提供compareTo,可以自定义排序方法

List有序集合:
List 有序可重复 常用的有ArrayList、LinkedList、Vector
ArrayList:
1.数据机构是数组,查询快(遍历块),增删慢(增删移动数据量大)
2.线程不安全,效率高

LinkedList:
1.数据结构是链表,查询慢(需要移动指针较慢),增删快(链表优势)
2.线程不安全,效率高

Vector
1.数据结构也是数组,类似于ArrayList
2.不同点是他的线程安全

对于Collection集合我们应该如何选择用哪一个?
用哪一个,可以考虑各个子集合的优缺点来选择
如果是元素不能重复就选择用Set
要排序的话选用TreeSet或LinkedHashSet
不用排序就用HashSet

元素可以重复的选用List
要求线程安全的选用Vector否则选用ArrayList、LinkedList
查询多的话使用ArrayList
增删多的话使用LinkedList

总结

Set和List都是Collection的子接口,都有各自的方法
Collection重要的一些方法:
在这里插入图片描述
在这里插入图片描述个接口各自的详细方法可查看API进行了解
有了对集合的大体认识可进行如下实现:

package unit7;
import java.util.*;
//一、产生10个1-100的随机数,并放到一个数组中,把数组中大于等于10的数字放到一个list集合中,并打印到控制台。
public class practicelist1 {
   
	public static void main(String[] args)
	{
   
		ArrayList<Integer> list = new ArrayList<>();
		int arr[] = new int[10];
		Random ra = new Random();
		
		for(int i=0;i<arr.length;i++)
		{
   
			arr[i]=ra.nextInt(100)+1;
			if(arr[i]>=10)
				list.add(arr[i]);
		}
		System.out.println(list);
		
	}

}




package unit7;

import java.util.ArrayList;

//定义一个方法listTest(ArrayList<Integer> al, Integer s),要求返回s在al里面第一次出现的索引,如果s没出现过返回-1
public class practicelist1{
   
	public static void main(String[] args)
	{
   
		ArrayList<Integer> list2 = new ArrayList<>();
		list2.add(4);
		list2.add(6)	;
		list2.add(7);
		list2.add(6);
		list2.add(5);
		list2.add(9);
		System.out.println("索引值 为:" +listTest(list2 ,6));
		
	}
	public static int listTest(ArrayList<Integer> al,Integer s)
	{
   
		for(int i=0;i<al.size();i++)
		{
   
			if(al.get(i)==s)
				return i;
		}
		return -1;
	}
}







package unit7;
import java.util.*;
//已知数组存放一批QQ号码,QQ号码最长为11位,最短为5位String[] strs = {"12345","67891","12347809933","98765432102","67891","12347809933"}。

//将该数组里面的所有qq号都存放在LinkedList中,将list中重复元素删除,将list中所有元素分别用迭代器和增强for循环打印出来。
public class practicelist1{
   
	public static void main(String[] args)
	{
   
		String[] strs = {
   "12345","67891","12347809933","98765432102","67891","12347809933"};
		LinkedHashSet<String> set = method01(strs);
		System.out.println(set);
		System.out.println(method02(strs));
		//迭代器打印输出
		Iterator<String> it = method01(strs).iterator()	;
		while(it.hasNext())
		{
   
			String value = it.next();
			System.out.println(value+ " ");
		}
		System.out.println();
		//for增强打印
		for(String s: method02(strs))
		{
   
			System.out.println(s+" ");
		}
	}
	private static LinkedHashSet<String> method01(String[] strs)
	{
   
		LinkedHashSet<String> set = new LinkedHashSet<>();
		for(int i=0;i<strs.length;i++)
		{
   
			set.add(strs[i]);
		}
		return set;
	}
	private static LinkedList<String> method02(String[] strs)
	{
   
		LinkedList<String> list = new LinkedList<>();
		for(int i=0;i<strs.length;i++)
		{
   
			list.add(strs[i]);
		}
		
		//如果此元素在,除了本次位置的其他元素内找到则删除该元素;
		for(int i=0;i<list.size();i++)
		{
   
			for(int j=i+1;j<list.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leng_tian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值