Java集合工具类Collections(一)

您所在的位置:网站首页 collections集合工具类位于 Java集合工具类Collections(一)

Java集合工具类Collections(一)

2023-08-06 17:09| 来源: 网络整理| 查看: 265

Collections

Java提供了一个操作Set、List和Map等集合的工具类:Collections,该工具类里提供了大量方法对集合元素进行排序、查询和修改等操作,还提供将集合对象设置为不可变、对集合对象实现同步控制等方法。

排序操作:

Collections提供对List集合元素进行排序的方法

void reverse(List list) 反转指定list集合中元素顺序

void shuffle(List list) 对List集合元素进行随机排序(模拟“洗牌”动作)

void sort(List list) 根据元素的自然数序对指定List集合的元素按升序进行排序

void sort(List list,Comparator c) 根据指定Comparator产生的顺序对List集合元素进行排序

void swap(List list ,int i ,int j) 将指定的list集合中的i 处元素和 j 处元素进行交换

void rotate(List list ,int distance) 当distance为正数时,将list集合的后distance个元素“整体”移到前面;当distance为负数时,将list集合的前distance个元素“整数”移到后面。该方法不会改变集合的长度。

示例:

package com.collections; import java.util.ArrayList; import java.util.Collections; public class CollectionList { public static void main(String[] args) { ArrayList list = new ArrayList(); list.add(2); list.add(-2); list.add(9); list.add(5); System.out.println(list);//[2, -2, 9, 5] //对指定list集合进行升序排序 Collections.sort(list); System.out.println(list);//[-2, 2, 5, 9] //将指定的list集合中的i 处元素和 j 处元素进行交换 Collections.swap(list, 0, 2); System.out.println(list);//[5, 2, -2, 9] //将list集合元素的次序反转 Collections.reverse(list); System.out.println(list);//[9, 5, 2, -2] //将指定list集合元素进行“洗牌”,随机排序 Collections.shuffle(list); System.out.println(list);//[-2, 5, 9, 2] } }

模拟洗牌示例:

package com.collections; import java.util.Arrays; import java.util.Collections; import java.util.LinkedList; import java.util.List; /** * Collections 棋牌类游戏 示例 * * @author hhmsw */ public class ColiectionsCardGame { // 模拟5个玩家 private static final int PLAYSNUM = 5; // 棋牌种类 private static final String[] CardTypes = { "红桃", "梅花", "方片", "黑桃" }; // 棋牌的数值 private static final String[] CardValues = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A" }; // Cards 以一局中剩余的牌 private List cards = new LinkedList(); // 玩家数量 private String[] players = new String[PLAYSNUM]; // 玩家手中的牌 private List[] playerCards = new List[PLAYSNUM]; // 初始化牌,并洗牌 private void initCards() { for (int i = 0; i < CardTypes.length; i++) { for (int j = 0; j < CardValues.length; j++) { cards.add(CardTypes[i] + CardValues[j]); } } System.out.println(cards); // 洗牌 Collections.shuffle(cards); System.out.println(cards); System.out.println("共" + cards.size() +"张"); } // 初始化玩家,玩家至少为2人以上,一人没得玩 private void initPlayer(String... names) { if (names.length < 2 || names.length > PLAYSNUM) { System.out.println("玩家数量不对"); return; } for (int i = 0; i < names.length; i++) { players[i] = names[i]; } for (String name : players) { System.out.println(name); } } // 初始化玩家手中的牌 private void initPlayerCard() { for (int i = 0; i < players.length; i++) { playerCards[i] = new LinkedList(); } } // 显示玩家手中的牌 private void showPlayersCards(String...name) { for (int i = 0; i < name.length; i++) { System.out.println(players[i] + "的牌:" + playerCards[i]); } } // 为玩家发牌 private void deliveerCards(String... name) { for (int i = 0; i < name.length; i++) { for (int j = 0; j < PLAYSNUM; j++) { playerCards[i].add(cards.get(0)); cards.remove(0); } } } private void remainCards(){ System.err.println("剩余:"+cards.size() + "张" ); System.err.println("剩余牌:"+cards ); } public static void main(String[] args) { String[] players = { "孙悟空", "如来佛祖", "玉皇大帝", "太白金星", "观音" }; ColiectionsCardGame c = new ColiectionsCardGame(); c.initCards(); c.initPlayer(players); c.initPlayerCard(); c.deliveerCards(players); c.showPlayersCards(players); c.remainCards(); } } 输出结果: ... [梅花3, 黑桃10, 梅花Q, 方片8, 梅花9, 红桃10, 黑桃Q, 黑桃9, 黑桃7, 梅花6, 红桃9, 梅花10, 方片10, 红桃4, 梅花J, 方片3, 黑桃8, 黑桃2, 方片6, 红桃5, 梅花K, 方片9, 红桃Q, 黑桃5, 红桃6, 方片J, 梅花2, 黑桃3, 红桃A, 黑桃4, 黑桃J, 黑桃6, 梅花4, 黑桃K, 红桃3, 梅花8, 方片7, 红桃K, 方片A, 梅花A, 红桃2, 方片4, 方片Q, 方片2, 梅花5, 梅花7, 方片5, 红桃8, 红桃J, 黑桃A, 红桃7, 方片K] 共52张 ... 孙悟空的牌:[梅花3, 黑桃10, 梅花Q, 方片8, 梅花9] 如来佛祖的牌:[红桃10, 黑桃Q, 黑桃9, 黑桃7, 梅花6] 玉皇大帝的牌:[红桃9, 梅花10, 方片10, 红桃4, 梅花J] 太白金星的牌:[方片3, 黑桃8, 黑桃2, 方片6, 红桃5] 观音的牌:[梅花K, 方片9, 红桃Q, 黑桃5, 红桃6] ... Collections 查找、替换操作

方法:

int binarySearch(List list,Object obj) 使用二分搜索法搜索指定的List集合,以获得指定对象在List集合中的索引。前提必须保证List中的元素已处于有序状态。 Object max(Collection coll) 返回集合中最大元素。 Object max(Collection coll,Comparator comp) 根据Comparator指定顺序,返回指定集合中最大的元素。 Object min(Collection coll) 返回集合中最小元素。 Object min(Collection coll ,Comparator comp) 根据Comparator指定顺序,返回指定集合中最小的元素。 void fill(List list ,Object obj) 使用指定元素obj替换指定List集合中所有元素。 int frequency(Collection c, Object o) 返回指定集合中指定元素出现的次数。 int indexOdSubList(List source,List target) 返回子List对象在父List对象中第一次出现的位置索引;如果父List中没有出现这样的子List,返回-1。 int lastIndexOfSubList(List source,List target) 返回子List对象在父List对象中最后一次出现的位置索引;如果父List中没有出现这样的子List,返回-1。 boolean replaceAll(List list ,Object oldVal,Object newVal) 使用一个新值newVal替换List集合中所有旧值oldVal。

示例:

package com.collections; import java.util.ArrayList; import java.util.Collections; public class CollectionsFindList { public static void main(String[] args) { ArrayList list = new ArrayList(); list.add(-1); list.add(2); list.add(0); list.add(5); list.add(5); System.out.println(list);//[-1, 2, 0, 5] //使用二分搜索法搜索指定的List集合,以获得指定对象在List集合中的索引 System.out.println(Collections.binarySearch(list, 0));//2 //返回集合中最大元素 System.out.println(Collections.max(list));//5 //返回集合中最小元素 System.out.println(Collections.min(list));//-1 //将集合中元素值为0的,替换成1 Collections.replaceAll(list, 0, 1);//[-1, 2, 1, 5] System.out.println(list); //将集合中所有元素值,替换成5 Collections.fill(list, 5); //返回元素值5在集合中出现的次数 System.out.println(list);//[5, 5, 5, 5] System.out.println(Collections.frequency(list, 5));//4 ArrayList list2 = new ArrayList(); list2.add(5); //返回子List对象在父List对象中第一次出现的位置索引;如果父List中没有出现这样的子List,返回-1 System.out.println(Collections.indexOfSubList(list, list2));//3 //返回子List对象在父List对象中最后一次出现的位置索引;如果父List中没有出现这样的子List,返回-1。 System.out.println(Collections.lastIndexOfSubList(list, list2));//4 } }

Java集合Collections(二)

Even a small star shines in the darkness. 星星再小,也会发光。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3