java基础集合操作工具类Collections简述(java集合四)



对集合中的元素进行排序

Collections中的sort方法使用

public class ListDemo {

	public static void main(String[] args) {

		List<String> lis = new ArrayList();
		lis.add("asd");
		lis.add("bvc");
		lis.add("adv");
		lis.add("sasd");
		lis.add("aaas");

		// 排序前
		System.out.println(lis);// [asd, bvc, adv, sasd, aaas]
		// 排序后
		Collections.sort(lis);
		System.out.println(lis);// [aaas, adv, asd, bvc, sasd]
		
		//按照自定议的方式进行排序
		Collections.sort(lis,new StringLengthSort());
		System.out.println(lis);//[adv, asd, bvc, aaas, sasd]
	}

}

// 定义一个按照字符串的长度比较器类
class StringLengthSort implements Comparator<String> {
	@Override
	public int compare(String s1, String s2) {
		//先根据字符串的长度进行排序
		if (s1.length() > s2.length())
			return 1;
		if (s1.length() < s2.length())
			return -1;
		//如果长度相同,再根据内容进行排序
		return s1.compareTo(s2);
	}
}


找出集合元素中的最大值

Collections中的求集合元素的最大值

public class ListDemo {

	public static void main(String[] args) {

		List<String> lis = new ArrayList();
		lis.add("asd");
		lis.add("bvc");
		lis.add("adv");
		lis.add("sasd");
		lis.add("aaas");
		// 对集合元素取最大值操作
		String max = Collections.max(lis);
		// 输出最大值
		System.out.println(max);// sasd

		List<Integer> list = new ArrayList();
		list.add(245);
		list.add(33);
		list.add(785);
		list.add(524);
		list.add(2);
		// 对集合元素取最大值操作
		int max1 = Collections.max(list);
		// 输出最大值
		System.out.println(max1);// 785<pre name="code" class="java">}

 
 

查找集合中相关元素对应的角标

public class ListDemo {

	public static void main(String[] args) {

		List<String> lis = new ArrayList();
		lis.add("asd");
		lis.add("bvc");
		lis.add("adv");
		lis.add("sasd");
		lis.add("aaas");
		//需要调用sort方法进行集合排序
		int index = Collections.binarySearch(lis, "sasd");
		
		System.out.println("sasd 的角标是:"+index);//sasd 的角标是:3
}
}
详细说明:

public static <T> int binarySearch(List<? extends Comparable<? super T>> list,T key)
   使用二分搜索法搜索指定列表,以获得指定对象。在进行此调用之前,必须根据列表元素的自然顺序对列表进行升序排序(通过sort(List) 方法)。如果没有对列表进行排序,则结果是不确定的。如果列表包含多个等于指定对象的元素,则无法保证找到的是哪一个,

参数:
list - 要搜索的列表。
key - 要搜索的键。
返回:
如果搜索键包含在列表中,则返回搜索键的索引;否则返回 (-( 插入点) - 1)。 插入点 被定义为将键插入列表的那一点:即第一个大于此键的元素索引;如果列表中的所有元素都小于指定的键,则为 list.size()。注意,这保证了当且仅当此键被找到时,返回的值将 >= 0。
抛出:
ClassCastException - 如果列表中包含不 可相互比较 的元素(例如,字符串和整数),或者搜索键无法与列表的元素进行相互比较。

使用自定义二分法查找

// 定义一个二分法查找方法
	public static int dichotomyLookUpIndex(List<String> list, String key) {
		int min = 0;// 记录最小值角标,默认为集合的开始位置
		int mid; // 记录中间值位置
		int max = list.size();;// 记录最大值位置

		while (min <= max) {
			// 得出中间值位置 key
			mid = (min + max) / 2;
			// 根据key来获取集合中对应的值
			String str = list.get(mid);
			// 进行比较
			int num = str.compareTo(key);
			// 按字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode 值。
			// 按字典顺序将此 String 对象表示的字符序列与参数字符串所表示的字符序列进行比较。
			// 如果按字典顺序此 String 对象位于参数字符串之前,则比较结果为一个负整数。
			// 如果按字典顺序此 String 对象位于参数字符串之后,则比较结果为一个正整数。如果这两个字符串相等,则结果为 0
			if (num > 0) {
				max = mid - 1;
			} else if (num < 0) {
				min = mid + 1;
			} else {
				return mid;
			}
		}
		return -min - 1;
	}
}


替换集合中元素的操作

public class ListDemo {

	public static void main(String[] args) {

		List<String> lis = new ArrayList();
		lis.add("asd");
		lis.add("bvc");
		lis.add("adv");
		lis.add("sasd");
		lis.add("aaas");

		System.out.println("原集合数据:"+lis);//原集合数据:[asd, bvc, adv, sasd, aaas]
				
		//替换指定元素内容				
		Collections.replaceAll(lis, "asd", "55555");
		System.out.println("替换后集合数据:"+lis);//替换后集合数据:[55555, bvc, adv, sasd, aaas]
		
		//将集合中的所有的元素进行替换 
		Collections.fill(lis, "0000");
		System.out.println("替换后集合数据:"+lis);//替换后集合数据:[0000, 0000, 0000, 0000, 0000]
		}
}




将集合中的元素反转操作


public class ListDemo {

	public static void main(String[] args) {

		List<String> lis = new ArrayList();
		lis.add("asd");
		lis.add("bvc");
		lis.add("adv");
		lis.add("sasd");
		lis.add("aaas");

		System.out.println("原集合数据:" + lis);// 原集合数据:[asd, bvc, adv, sasd, aaas]
		// 排序后
		Collections.sort(lis);
		System.out.println(lis);// [aaas, adv, asd, bvc, sasd]

		// 反转操作后
		Collections.reverse(lis);
		System.out.println(lis);// [sasd, bvc, asd, adv, aaas]
		
}
}

对指定的列表进行置换

public static void main(String[] args) {

		List<String> lis = new ArrayList();
		lis.add("asd");
		lis.add("bvc");
		lis.add("adv");
		lis.add("sasd");
		lis.add("aaas");

		System.out.println("原集合数据:" + lis);// 原集合数据:[asd, bvc, adv, sasd, aaas]
		//使用指定的随机源对指定列表进行置换。所有置换发生的可能性都是相等的,假定随机源是公平的。
		//每次运行的结果都不一样
		Collections.shuffle(lis, new Random());
		System.out.println("Random集合数据:" + lis);//Random集合数据:[adv, aaas, sasd, bvc, asd]
}
}


交换集合中元素的位置

public static void main(String[] args) {

		List<String> lis = new ArrayList();
		lis.add("asd");
		lis.add("bvc");
		lis.add("adv");
		lis.add("sasd");
		lis.add("aaas");

		System.out.println("原集合数据:" + lis);// 原集合数据:[asd, bvc, adv, sasd, aaas]
		
		//在指定列表的指定位置处交换元素。
		Collections.swap(lis, 0, 1);
		System.out.println("交换后的集合数据:" + lis);//交换后的集合数据:[bvc, asd, adv, sasd, aaas]
		<pre name="code" class="java">}
}

 
 




你可能感兴趣的:(java基础,list,集合,java开发)