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