List集合

一、数组与集合之间的相互转换

(1)数组转换为集合
通过工具类Arrays的静态方法asList可以将一个数组转换为List集合

String[] array=new String[]{"one","two","three"};
//数组转换为集合,但是对象还是同一个队形
List<String> list=Arrays.asList(array);
list.set(0,"1");//将下标为0的元素该为1
//对集合元素的操作就是对原数组的操作
System.out.println("源数组"+Arrays.toString(array));

不能直接添加或者删除元素,会导致数组扩容或者缩容,这样是不被支持(list.add(“five”)或者list.remove(“three”);如果需要添加时,可以选择复制集合的方式来添加。

List<String> list2 = new ArrayList<String>(list);
		list2.add("five");
		System.out.println("list2集合:"+list2);

(2)集合转换为数组
Collection 提供了一个方法,toArray,可以将当前集合转换为数组

public static void main(String[] args) {
		List<String> list=new ArrayList<String>();
		list.add("one");
		list.add("two");
		list.add("three");
		list.add("four");
		list.add("five");
		//把集合转化为数组
		String[] s=new String[0];
		String[] str=list.toArray(s);
		for(String st:str){
			System.out.println(st);
		}
}

二、集合排序
排序集合可以使用集合的工具类
java.untl.Collections
其定义很多静态方法,用于操作集合,其中sort()方法是对list集合进行自然排序(升序)
1)对list集合进行升序排列

List<Integer> list=new List<Integer>();
for(int i=0;i<10;i++){
	list.add((int)(Math.Random()*100));
}
System.out.println(list);
//对集合进行升序排列
Collections.sort(list);
System.out.println(list);
}

2)使用比较器进行自定义比较
推荐的排序方式
当遇到排序自定义类型元素,或者集合元素自身的比较规则不满足排序时,都建议使用下面的方式排序。自定义排序方式。
该sort方法要求额外传入一个比较器规则比较集合元素并进行排序,因此排序方法不要求集合实现Comparable接口。

List<Point2> list = new ArrayList<Point2>;
list.add(new Point2(2,8));
list.add(new Point2(4,8));
list.add(new Point2(5,5));
list.add(new Point2(7,8));
list.add(new Point2(3,1));
list.add(new Point2(9,4));
System.out.println("原集合"+list);
Collection.sort(list,Comparator<String>(){
	public int compare(Point2 o1,Point2 o2){
		int len=o1.getX()*o1.getX()+o1.getY()*o1.getY();
		int olen=o2.getX()*o2.getX()+o2.getY()*o2.getY();
		return olen-len;
	}
});
System.out.println(list);

三、遍历集合
java.util.List线性表
List的特点:可重复并且有序,可以通过下标操作元素。
常用实现类:
ArrayList:内部由数组实现,查询快,增删慢;
LinkedList:内部有链表实现,查询蛮,增删快;
对于不是极端苛刻的情况下,通常使用ArrayList,含头不含尾。

public static void main(String[] args) {
		List<String> list=new ArrayList<String>();
		list.add("one");
		list.add("two");
		list.add("three");
		System.out.println(list);
		
		//获取指定位置对应的元素
		//E get(int index);
		String str = list.get(2);
		System.out.println(str);
		
		//使用传统的for循环遍历list集合
		for(int i=0;i<list.size();i++){
			String s=list.get(i);
			System.out.println(s);//获取集合中每一个元素的下标返回下标所对应的元素
		}
		
		//使用增强for循环遍历list集合
		for(String ss:list){
			System.out.println(ss);
		}
		
		//用迭代器遍历list集合
		Iterator<String> it=list.iterator();
		while(it.hasNext()){
			String s=it.next();
		}
		
		//替换元素
		//E set(int index,E e)
		//将指定元素设置到指定位置上,返回原来指定位置上的元素
		String ss=list.set(1, "2");
		System.out.println(ss);
		
		//删除元素操作
		//E remove(int index)
		String old=list.remove(1);
		System.out.println(old);
		
}

四、list集合中套用list集合

public static void main(String[] args) {
		//热门推荐
		List<String> list1=new ArrayList<String>();
		list1.add("iphone");
		list1.add("honor");
		list1.add("vivo");
		
		List<String> list2=new ArrayList<String>();
		list2.add("5G手机");
		list2.add("华为");
		list2.add("小米");
		
		List<String> list3=new ArrayList<String>();
		list3.add("营业厅");
		list3.add("宽带");
		
		List<List<String>> itemize = new ArrayList<List<String>>();
		itemize.add(list1);
		itemize.add(list2);
		itemize.add(list3);
		
		for(List<String> li:itemize){
			for(String l:li){
				System.out.println(l);
			}
		}
	}

五、截取指定范围的子集
List subList(int fromIndex,int toIndex);
含头不含尾

//随机生成10个整数并存储到list集合中
//参与集合中的泛型类型必须是包装类型,因此在这里参与集合的int类型必须是它的包装类型Integer类型
public static void main(String[] args) {
		
		List<Integer> list=new ArrayList<Integer>();
		Random random=new Random();
		for(int i=0;i<10;i++){
			int num=random.nextInt(101);
			list.add(num);
		}
		System.out.println(list);
		
		//截取集合中的下标为3到8的元素
		List<Integer> sublist=list.subList(3, 8);
		System.out.println("截取后的集合子串为:"+sublist);
		
		//截取元素的同时并将元素扩大10倍
		List<Integer> sublist2=list.subList(2, 7);
		for(int i=0;i<sublist2.size();i++){
			int s=sublist2.set(i, sublist.get(i)*10);
		}
		System.out.println(sublist2);
		//对子集元素操作,就是对原集合对应元素的操作
		//删除list元素第3个到第7个
		list.subList(3, 8).clear();
	}

六、线程安全的集合:
常用的集合实现类:ArrayList,LinkedList,HashSet他们都不是线程安全的,多线程情况下使用会出现并发问题。
Collections提供了将集合转换为线程安全的方法。

List<String> list=new ArrayList<String>
list.add("one");
list.add("two");
list.add("three");
list.add("four");
//将线程转换为线程安全的
list=Collections.synchronizedList(list);
Set<String> set=new HashSet<String>();
set=Collections.synchronizedList(set);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值