Java数据结构——集合:工具类Collections

便于观察:?代表的是泛型实参类型,T代表的是元素类型

(1)public static boolean addAll(Collection<? super T> c,T… elements):把elements这些元素添加到c这个集合中

@Test
	public void test1(){
		//元素是1,2,3,4
		ArrayList<Integer> list = new ArrayList<Integer>();
		ArrayList<String> list2 = new ArrayList<String>();
		ArrayList<Object> list3 = new ArrayList<Object>();
		ArrayList<Number> list4 = new ArrayList<Number>();
		
		//此时T是Integer类型,
		//<? super T>:可以是Integer或它的父类
		Collections.addAll(list, 1,2,3,4);
		                    c      T
		   //C>T才满足,可以理解为容器要放得下物品                 
		
		//此时T是Integer类型,
		//因为String不满足<? super T>
         //Collections.addAll(list2, 1,2,3,4);
		
		//此时T是Integer类型,
		//Object满足<? super T>
		Collections.addAll(list3, 1,2,3,4);
		
		//此时T是Integer类型,
		//Nubmer满足<? super T>
		Collections.addAll(list4, 1,2,3,4);
	}

(2)public static int binarySearch(List< ? extends Comparable<? super T>> list, T key):在list集合中找出key,用二分查找法
此时要求list集合是有大小顺序,list集合中的元素必须是实现Comparable接口,?可以是T或T的父类,这个父类实现现Comparable接口也可以。

@Test
	public void test2(){
		ArrayList<Integer> list = new ArrayList<Integer>();
		list.add(1);
		list.add(5);
		list.add(9);
		
		//此时的T是Integer
		//list的<Integer>,这个Integer实现了comparable接口
		int index = Collections.binarySearch(list, 4);
	}
	

(3)public static int binarySearch(List<? extends T> list,T key,Comparator<? super T> c)
此时要求list集合是有大小顺序的,按照你指定的Comparator进行比较大小
< ? extends T>:是T或T的子类,说明list中存的元素是T类型的对象或T类型的子类对象

< ? super T>:这个比较器是为T或T的父类设计的比较器也可以

@Test
	public void test3(){
		ArrayList<SubCircle> list = new ArrayList<SubCircle>();
		list.add(new SubCircle(1.2));
		list.add(new SubCircle(2.2));
		list.add(new SubCircle(3.2));
		
		//T是Circle类型
		//因为Graphic是Circle的父类,<? super T>
		//SubCircle是Circle的子类,满足<? extends T>
		Collections.binarySearch(list, new Circle(2.2), new Comparator<Graphic>(){

			@Override
			public int compare(Graphic o1, Graphic o2) {
				if(o1.getArea() > o2.getArea()){
					return 1;
				}else if(o1.getArea() < o2.getArea()){
					return -1;
				}
				return 0;
			}
			
		});
	}

abstract class Graphic{
	public abstract double getArea();
}
class Circle extends Graphic{
	private double radius;

	public Circle(double radius) {
		super();
		this.radius = radius;
	}
	@Override
	public double getArea() {
		return Math.PI * radius * radius;
	}

	@Override
	public String toString() {
		return "Circle [radius=" + radius + "]";
	}
	
}
class SubCircle extends Circle{
	public SubCircle(double radius) {
		super(radius);
		
	}
}

(4)public static < T> void copy(List<? super T> dest,List<? extends T> src):把src的元素复制到dest
src中存的是T或T的子类的对象
dest要求元素类型是T或T的父类类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

GuochaoHN

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

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

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

打赏作者

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

抵扣说明:

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

余额充值