正常遍历集合,判断遍历到的元素
这时一旦删除元素,集合长度会减1,循环索引加1后会有元素遗漏,遍历不到。
解决方案:删除一个元素,循环索引就减1.
package cn.itcast;
import java.util.ArrayList;
public class ArrayListDemo {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("abc");
list.add("abc");
list.add("bbb");
list.add("ccc");
list.add("abc");
list.add("abc");
list.add("abc");
list.add("abc");
list.add("ooo");
list.add("abc");
list.add("abc");
for (int i = 0; i < list.size(); i++) {
String s = (String) list.get(i);
if ("abc".equals(s)) {
list.remove(i);
i--;
}
}
*/
/*
* 方式2:将集合倒着遍历,判断元素并删除。
*/
for (int i = list.size() - 1; i >= 0; i--) {
String s = (String) list.get(i);
if ("abc".equals(s)) {
list.remove(i);
}
}
System.out.println("list:" + list);
System.out.println(list.size());
}
}
一个字符串集合ArrayList中含有如下元素:
hello,world, java, hello, .net, java, php,
ios,java, android,world。
要求编写程序,获得一个没有重复元素的新集合。
package cn.itcast;
import java.util.ArrayList;
import java.util.LinkedHashSet;
public class ArrayListDemo2 {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("hello");
list.add("world");
list.add("java");
list.add("hello");
list.add(".net");
list.add("java");
list.add("php");
list.add("ios");
list.add("java");
list.add("android");
list.add("world");
/*
// 创建新集合,遍历旧集合,获取到每一个元素进行判断, 新集合中是否已经存在,如果存在不添加
ArrayList newList = new ArrayList();
for (int i = 0; i < list.size(); i++) {
String s = list.get(i);
// 判断新集合中是否已存在
if (!newList.contains(s)) { // 依赖equals方法
// 不存在,添加
newList.add(s);
}
}
// 打印新集合
System.out.println(newList);
*/
// 方式2 使用LinkedHashSet
LinkedHashSet lhs = new LinkedHashSet<>();
// 将list里所有元素添加到LinkedHashSet,自动实现了唯一,且不改变存取顺序
lhs.addAll(list);
// 清空list
list.clear();
// 将LinkedHashSet中的元素再添加回list
list.addAll(lhs);
System.out.println(list);
}
}
打印出字符串"abbbbbccccdddee26"中每个字符出现的次数,要求输出格式:"a(1)b(5)c(4)d(3)e(2)2(1)6(1)"
此题要求有顺序,所以采用LinkedHashMap实现
package cn.itcast;
import java.util.LinkedHashMap;
public class Test {
public static void main(String[] args) {
// 1,定义一个需要被统计字符的字符串
String s = "abbbbbccccdddee26";
// 2,将字符串转换为字符数组
char[] arr = s.toCharArray();
// 3,定义双列集合,存储字符串中字符以及字符出现的次数
LinkedHashMap lhm = new LinkedHashMap<>();
// 4,遍历字符数组获取每一个字符,并将字符存储在双列集合中
for (char c : arr) {
// 5,存储过程中要做判断,如果集合中不包含这个键,就将该字符当作键,值为1存储,如果集合中包含这个键,就将值加1存储
if (!lhm.containsKey(c)) { // 如果不包含这个键
lhm.put(c, 1);
} else {
lhm.put(c, lhm.get(c) + 1);
}
}
// 6,遍历集合将键和值拼接起来
StringBuilder sb = new StringBuilder();
for (Character key : lhm.keySet()) { // hm.keySet()代表所有键的集合
sb.append(key + "(" + lhm.get(key) + ")");
}
// 输出结果
System.out.println(sb);
}
有类似这样的字符串:"1.2,3.4,5.6,7.8,5.56,44.55"请按照要求,依次完成以下试题。
(1)以逗号作为分隔符,把已知的字符串分成一个String类型的数组,数组中的每一个元素类似于"1.2","3.4"这样的字符串
(2)把数组中的每一个元素以"."作为分隔符,把"."左边的元素作为key,右边的元素作为value,
封装到Map中,Map中的key和value都是Object类型。 (3)把map中的key封装的Set中,并把Set中的元素输出。
(4)把map中的value封装到Collection中,把Collection中的元素输出。
package cn.itcast;
import java.util.Collection;
import java.util.HashMap;
import java.util.Set;
public class Test {
public static void main(String[] args) {
String s = "1.2,3.4,5.6,7.8,5.56,44.55";
// 逗号分隔成String类型数组
String[] arr = s.split(",");
// 再以点分隔,放进Map
HashMap map = new HashMap();
for (int i = 0; i < arr.length; i++) {
String[] arrs = arr[i].split("\\.");
map.put(Integer.parseInt(arrs[0]), Integer.parseInt(arrs[1]));
}
// 获取键集合
Set set = map.keySet();// 获取键集合对象
// 遍历键集合
for (Integer in : set) {
System.out.println(in);
}
System.out.println("-----------");
// 获取值集合
Collection c = map.values();
// 遍历值
for (Integer in : c) {
System.out.println(in);
}
}
}
并将所有已输入的字符串按字典顺序倒序打印。
package com.itheima.com;
import java.util.Comparator;
import java.util.Scanner;
import java.util.TreeSet;
public class TreeSetDemo {
public static void main(String[] args) {
// 封装键盘录入
Scanner sc = new Scanner(System.in);
// 定义TreeSet集合实现倒序排列
TreeSet set = new TreeSet<>(new Comparator() {
@Override
public int compare(String s1, String s2) {
// 如果允许重复,就再加一句判断,这个返回值是0就改成1
return s2.compareTo(s1);
}
});
// 录入数据
System.out.println("请录入数据:");
while (true) {
String line = sc.nextLine();
if ("end".equals(line)) {
break;
}
set.add(line);
}
// 遍历集合获取数据
for (String str : set) {
//System.out.println(str);
// 显示在一行
System.out.print(str + " ");
}
}
}
1、有类似这样的字符串:"1.2,3.4,5.6,7.8,5.56,44.55"请按照要求,依次完成以下试题。
(1)以逗号作为分隔符,把已知的字符串分成一个String类型的数组,数组中的每一个元素类似于"1.2","3.4"这样的字符串
(2)把数组中的每一个元素以"."作为分隔符,把"."左边的元素作为key,右边的元素作为value,封装到Map中,Map中的key和value都是Object类型。
(3)把map中的key封装的Set中,并把Set中的元素输出。
(4)把map中的value封装到Collection中,把Collection中的元素输出。
package com.itheima;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class ExamTest1 {
public static void main(String[] args) {
String string = "1.2,3.4,5.6,7.8,5.56,44.55";// 定义一个字符串
Map