Java中各种数据结构的遍历
一、List
1.遍历:
List<String> strList = new ArrayList<>();
// 1. 普通遍历方式
for (int i = 0; i < strList.size(); i++) {
System.out.println(strList.get(i));
}
// 2.for:each循环
for (String str : strList) {
System.out.println(str);
}
// 3. 使用Iterator迭代器
Iterator<String> it = strList.iterator();
while (it.hasNext()) {
String str = (String) it.next();
System.out.println(str);
}
// 4. java8 Lambda方式
// strList.forEach(System.out::println);//和下面的写法等价
strList.forEach(str -> {
System.out.println(str);
});
常用的1、2两种方式
2.add方法
List接口中的add方法有如下两种重载方式:
① boolean add(E e);
② void add(int index, E element);
方法①用于向列表的末尾插入新元素,这也是List接口中最常用的插入方法;方法②则可以在插入操作过程中指定插入的位置,此时,会自动将当前位置及只有的元素后移进行插入
需要注意的是,参数index的值不可大于当前list的容量,即在使用此方法填充一个list时,必须以0开始依次填充。
注意,即使在创建list对象时指定了初始化大小,依旧会有以上问题
addAll方法和add方法类似,区别在于addAll方法可以一次插入一个集合中的多个元素,重载方法也有两种:
① boolean addAll(Collection<? extends E> c);
② boolean addAll(int index, Collection<? extends E> c);
对于包含下标参数index的方法②,在使用时具有和包含index参数的add方法同样的限制条件,在执行插入前同样会检查size的值,如果指定的index值大于size值,则会抛出异常最后需要注意的是,addAll方法中的集合c不可以传入null值,否则会有异常。
另外,该方法没有线程安全的设置,当传入的参数c正在被另一个线程操作时,其结果是不确定的
3.set方法
set方法直观上根据方法名可以理解为设置list中某个位置的元素。但需要注意的是,该方法本质上是一种替换操作,即,要设置某个位置上的元素,这个位置在设置前必须有元素,否则会抛出异常
对于上面的异常,可以采取预填充的方式,如下:
public class Main {
public static void main(String[] args) {
List<String> stringList = new ArrayList<>();
stringList.add(null);
stringList.add(null);
stringList.add(null);
stringList.add(null);
stringList.add(null);
stringList.add(null);
stringList.set(2, "2");
stringList.set(1, "1");
stringList.set(0, "0");
stringList.set(4, "4");
stringList.set(3, "3");
stringList.set(5, "5");
System.out.println(stringList);
}
程序首先对list进行了null填充,然后在通过set方法替换为有用的数据
二、MAP
上一篇: Java正则表达式的读取