public class Gerbil {
private int gerbilNumber;
public Gerbil(int number) {
gerbilNumber = number;
}
public void hop() {
System.out.println(gerbilNumber + "跳起来啦");
}
public static class Inner {
public static void main(String[] args) {
ArrayList<Gerbil> list = new ArrayList<Gerbil>();
for (int i = 0; i < 10; i++) {
list.add(new Gerbil(i));
}
for (int i = 0; i < list.size(); i++) {
list.get(i).hop();
}
}
}
}
输出
0跳起来啦
1跳起来啦
2跳起来啦
3跳起来啦
4跳起来啦
5跳起来啦
6跳起来啦
7跳起来啦
8跳起来啦
9跳起来啦
// ArrayList的构造方法并不高效
List<String> list = new ArrayList<String>(Arrays.asList(arr));
// 还是像上面说的,首先建议使用Collection.addAll()这种方法更高效
List<String> list = new ArrayList<String>();
Collections.addAll(list, arr);
// 这个例子很简单,但是非要写一下,subList得到的这个list,进行何种操作都会影响到初始列表
// 想要正常使用Arrays.asList()和subList()这两个方法返回的list,我们可以创建它们的副本
public class Apple {
int id;
public Apple(int i) {
id = i;
}
public static class Main{
static List<Apple> list = new ArrayList<>();
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
list.add(new Apple(i));
}
List<Apple> list2 = list.subList(0, 3);
// 移除list2中的第二项
list2.remove(1);
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).id);
}
}
}
}
输出:
0
2
3
4
5
6
7
8
9
11.6 迭代器
任何容器都可以插入元素并取出元素,比如list的add()和get()方法
对于list我们肯定会涉及到遍历操作
// 一个list的三种遍历方式
List<Apple> list = new ArrayList<>();
// 1、普通方式
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i).id);
}
// 2、foreach, 写起来挺简洁,但是无法获得下标
for(Apple apple : list) {
System.out.print(apple.id);
}
// 3、迭代器方式
Iterator<Apple> iterator = list.iterator();
while(iterator.hasNext()) {
System.out.print(iterator.next().id);
}
public class Stack<T> {
private LinkedList<T> storage = new LinkedList<>();
public void push(T v) {
storage.addFirst(v);
}
public T peek() {
return storage.getFirst();
}
public T pop() {
return storage.removeFirst();
}
public boolean empty() {
return storage.isEmpty();
}
}
练习15:对表达式求值,“+”表示将后面的字母压进栈,而“-”表示弹出栈顶字母并打印它
// 你还别说,通过这个例子
// for循环不自增的用法确实挺骚
// 再一个就是思维的问题,如果按正常考虑肯定要一位一位的判断是+还是-,
// 然后用一个变量来记录上一位是个符号还是字母,
// 因为存在符号也算字符的问题,甚至得记录到上一位的上一位,那这样解决这个问题就太复杂了
// 通过自增来解决这个问题,那么就容易多了
public class Pratice15 {
private static Stack<Character> stack = new Stack<>();
public static void main(String[] args) {
String string = "+U+n+c---+e+r+t---+a-+i-+n+t+y---+ -+r+u--+l+e+s---";
char[] array = string.toCharArray();
for (int i = 0; i < array.length;) {
switch (array[i++]) {
case '+':
stack.push(array[i++]);
break;
case '-':
System.out.print(stack.pop());
default:
break;
}
}
}
}
输出:
cnUtreaiytn ursel