1.顺序容器
容器类:
ArrayList<String> notes = new ArrayList<String>();
容器类的变量定义时有两个类型:容器的类型(如ArrayList),元素的类型(String)。
记事本模型:
import java.util.ArrayList;
public class NoteBook {
private ArrayList<String> notes = new ArrayList<String>();//ArrayList<String>表示用来存放String的ArrayList。是范型类。范型类是一种容器。
public void add(String s) {
notes.add(s);//根据定义ArrayList<String>,容器里只能放String类型
}
public void add(String s,int location) {
notes.add(location, s);
}
public int getSize() {
return notes.size();
}
public String getNote(int index) {
return notes.get(index);
}
public void removeNote(int index) {
notes.remove(index);
}
public String[] list() {
String[] a = new String[notes.size()];
// for(int i=0;i<notes.size();i++) {
// a[i] = notes.get(i);
// }
notes.toArray(a);
return a;
}
public static void main(String[] args) {
// String[] a = new String[2];
// a[0] = "first";
// a[1] = "second";
NoteBook nb = new NoteBook();
nb.add("first");
nb.add("second");
nb.add("third", 1);
System.out.println(nb.getSize());
System.out.println(nb.getNote(0));
System.out.println(nb.getNote(1));
nb.removeNote(1);
String[] a = nb.list();
for(String s : a ) {
System.out.println(s);
}
}
}
2.对象数组
对象数组中的每个元素都是对象的管理者而非对象本身。
int[] ia = new int[10];
for( int i=0; i<ia.length; i++) {
ia[i] = i;
}
for(int k:ia) {
System.out.println(k);
}
String[] a = new String[10];//String是对对象a的管理者。
for( int i=0; i<a.length; i++) {
a[i] = ""+i;
System.out.println("x"+a[i]);
}
// System.out.println(ia[0]);
// System.out.println(a[0].length());
输出结果:
0
1
2
3
4
5
6
7
8
9
x0
x1
x2
x3
x4
x5
x6
x7
x8
x9
对象数组使用循环
class Value {
private int i;
public void set(int i) { this.i = i;}
public int get() { return i;}
}
class...{
...
public static void main(String[] args) {
Value[] a = new Value[10];
for( int i=0; i<a.length; i++) {
a[i] = new Value();
a[i].set(i);
}
for(Value v : a) {
System.out.println(v.get());
v.set(0);
}
for(Value v : a) {
System.out.println(v.get());
}
}
}
输出结果:
0
1
2
3
4
5
6
7
8
9
0
0
0
0
0
0
0
0
0
0
容器可以使用for循环
ArrayList<String> a = new ArrayList<String>();
a.add("first");
a.add("second");
for( String s : a) {
System.out.println(s);
}
输出结果:
first
second
3.集合对象
HashSet也是一种容器
ArrayList<String> a = new ArrayList<String>();
a.add("first");
a.add("second");
a.add("first");
// for( String s : a) {
// System.out.println(s);
// }
System.out.println(a);//可以直接输出,不用for循环
System.out.println("---------------");
HashSet<String> s = new HashSet<String>();//Set是集合容器,集合中没有重复元素
s.add("first");
s.add("second");
s.add("first");
// for( String k : s) {
// System.out.println(k);
// }
System.out.println(s);
任何一个java类只要实现了public String toString()函数,就可以用System.out.println()直接输出对象,因为它会直接去调用toString函数输出返回的String。
class Value {
...
public String toString() { return ""+i; }
}
class...{
...
Value v = new Value();
v.set(10);
System.out.println(v);
}
4.散列表
对哈希表来说,键值是唯一的;多次放同一个键的值进去,不管值是否相同,留下的只有最后一次。
import java.util.HashMap;
import java.util.Scanner;
public class Coin {
private HashMap<Integer,String> coinnames = new HashMap<Integer,String>();
public Coin() {
coinnames.put(1, "penny");
coinnames.put(10, "dime");
coinnames.put(25, "quarter");
coinnames.put(50, "half-dolar");
coinnames.put(50, "五毛");
System.out.println(coinnames.keySet().size() );//key的个数
System.out.println(coinnames);
for( Integer k : coinnames.keySet() ) {//遍历hash表
String s = coinnames.get(k);
System.out.println(s);
}
}
public String getName(int amount) {
if( coinnames.containsKey(amount) ) {
return coinnames.get(amount);
}else {
return "NOT FOUND";
}
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int amount = in.nextInt();
Coin coin = new Coin();
String name = coin.getName(amount);
System.out.println(name);
}
}