集合练习题
1、产生10个1-100的随机数,并放到一个数组中,把数组中大于等于10的数字放到一个list集合中,并打印到控制台
public static void main(String[] args) {
Random r = new Random();
int[] arr = new int[10];
List<Integer> list = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
arr[i] = r.nextInt(100);
if (arr[i] > 10)
list.add(arr[i]);
}
System.out.println(list);
}
2、假设顺序列表ArrayList中存储的元素是整型数字1~5,请使用你所知的所有方法遍历每个元素,将每个元素顺序输出
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
for (int i = 1; i <= 5; i++) {
list.add(i);
}
System.out.println(list);
Iterator<Integer> it = list.iterator();
System.out.println("第一种!!");
while (it.hasNext()) {
System.out.print(it.next() + " ");
}
System.out.println();
System.out.println("第二种!!");
list.forEach(System.out::println);
System.out.println("第三种!!!");
for (Integer ss : list)
System.out.print(ss + " ");
}
3、从控制台输入若干行英文内容(输入回车一行结束,输入quit表示输入完成)以单词的方式放入集合中,将这些单词排序后(忽略大小写)打印出来
public static void main(String[] args) {
List<String> list = new ArrayList<>();
Scanner sc = new Scanner(System.in);
boolean flag = true;
do {
String temp = sc.nextLine();
if (temp.equals("quit"))
flag = false;
list.add(temp);
} while (flag);
TreeSet<String> set = new TreeSet<>();
for (int i = 0; i < list.size(); i++) {
set.add(list.get(i).toLowerCase());
}
System.out.println(set);
}
4、从控制台输入若干行英文内容(输入回车一行结束,输入quit表示输入完成)以单词的方式放入集合中,将这些单词忽略大小写按照出现次数自然排序,如果次数相等,则按照字母顺序倒序后打印出来
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Map<String, Integer> map = new HashMap<>();
while (sc.hasNextLine()) {
String ss = sc.nextLine();
if ("quit".equals(ss))
break;
if (ss.trim().length() > 0) {
String[] arr = ss.split(" ");
for (String tmp : arr) {
if (map.containsKey(tmp.toLowerCase())) {
map.put(tmp.toLowerCase(), 1 + map.get(tmp.toLowerCase()));
} else
map.put(tmp.toLowerCase(), 1);
}
}
}
sc.close();
TreeSet<Entry<String, Integer>> set = new TreeSet<>((obj1, obj2) -> {
int res = obj1.getValue() - obj2.getValue();
if (res == 0)
res = obj2.getKey().compareTo(obj1.getKey());
return res;
});
set.addAll(map.entrySet());
for (Entry tmp : set)
System.out.println(tmp.getKey() + "::" + tmp.getValue());
}
5、尝试使用Set/Map存放数据的写法
public static void main(String[] args) {
Random r = new Random();
Set<Integer> set = new TreeSet<>();
for (int i = 0; i < 5; i++) {
set.add(r.nextInt(50));
}
System.out.println(set.toString());
Map<String, Integer> map = new HashMap<>();
map.put("a", r.nextInt(100));
map.put("b", r.nextInt(100));
System.out.println(map.toString());
}
6、在一个列表中存储以下字串类型元素:apple,grape,banana,pear。返回集合中的最大的和最小的元素。将集合进行排序,并将排序后的结果打印在控制台上
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("apple");
list.add("grape");
list.add("banana");
list.add("pear");
System.out.println(list.stream().max(String::compareTo).get());
System.out.println(list.stream().min(String::compareTo).get());
System.out.println(list.stream().sorted(String::compareTo).collect(Collectors.toList()));
}
7、定义一个方法listTest( ArrayList al, Integer s),要求返回s在al里面第一次出现的索引,如果s没出现过返回-1
先完成基础编码,然后再考虑方法的定义 int listTest( List al,T s)
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
Random r = new Random();
for (int i = 0; i < 10; i++) {
list.add(r.nextInt(100));
}
System.out.println(list);
System.out.println(listTest(list, 10));
}
public static int listTest(List<Integer> list, Integer s) {
int res = 0;
for (int i = 0; i < list.size(); i++) {
int temp = list.get(i);
if (s == temp)
res = i;
res = -1;
}
return res;
}
public static <T extends Number> int listTest(List<T> al, T s) {
int res = -1;
if (al != null && al.size() > 0) {
for (int i = 0; i < al.size(); i++) {
T temp = al.get(i);
if (temp == s) {
res = i;
break;
}
}
}
return res;
}
8、已知数组存放一批QQ号码,QQ号码最长为11位,最短为5位,请随机生成10个合法的QQ号码,将所有qq号都存放在LinkedList中,将list中重复元素删除,将list中所有元素分别用迭代器和增强for循环打印出来
生成QQ号码的方法:可以用整数生成也可以用字符串的方式生成
//方法一:
public static void main(String[] args) {
int[] arr = new int[10];
Random r = new Random();
LinkedList<Integer> list = new LinkedList<>();
for (int i = 0; i < arr.length; i++) {
int rnd;
do {
rnd = r.nextInt();
} while (rnd > 1e11 || rnd < 1e5);
if (!list.contains(rnd))
list.add(rnd);
}
Iterator it = list.iterator();
while (it.hasNext()) {
System.out.print(it.next() + " ");
}
System.out.println();
for (Integer i : list) {
System.out.print(i + " ");
}
}
//方法二:
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
while (list.size() < 10) {
String source = "0123456789";
Random r = new Random();
int len = r.nextInt(7) + 5;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < len; i++) {
char cc = source.charAt(r.nextInt(source.length()));
if (i == 0 && cc == '0') {
i--;
continue;
}
sb.append(cc);
}
if (!list.contains(sb.toString()))
list.add(sb.toString());
}
Iterator it = list.iterator();
while (it.hasNext()) {
System.out.print(it.next() + " ");
}
}
9、在一个集合TreeSet中存储无序并且重复的字符串,定义一个方法,让其有序(字典排序)还不能去除重复的元素输出。
提示:compare方法不能返回0即可
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("aaa");
list.add("aaa");
list.add("ccc");
list.add("ddd");
list.add("fffffffffff");
list.add("man");
list.add("loaderman");
list.add("bbbb");
list.add("aaa");
list.add("aaa");
TreeSet<String> set = new TreeSet<>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
int num = o1.compareTo(o2);
return num == 0 ? 1 : num;
}
});
set.addAll(list);
list.clear();
list.addAll(set);
System.out.println(list);
}
10、已知有十六支男子足球队参加2008北京奥运会。写一个程序,把这16 支球队随机分为4 个组。
提示:采用List集合和随机数
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();
Random r = new Random();
for (int i = 0; i < 15; i++) {
list.add(i);
}
System.out.println(list);
System.out.println("一组:");
for (int i = 0; i < 4; i++) {
int temp = r.nextInt(list.size());
list2.add(list.get(temp));
list.remove(list.get(temp));
}
System.out.println(list2);
list2.clear();
System.out.println("二组:");
for (int i = 0; i < 4; i++) {
int temp = r.nextInt(list.size());
list2.add(list.get(temp));
list.remove(list.get(temp));
}
System.out.println(list2);
list2.clear();
System.out.println("三组:");
for (int i = 0; i < 4; i++) {
int temp = r.nextInt(list.size());
list2.add(list.get(temp));
list.remove(list.get(temp));
}
System.out.println(list2);
list2.clear();
System.out.println("四组:");
for (int i = 0; i < list.size(); i++) {
list2.add(list.get(i));
}
System.out.println(list2);
}