3.1. 顺序容器
能存储需求、不限制能存储的记录的数量、能知道已经存储的记录的数量、能查看存进去的每一条记录、能删除一条记录、能列出所有的记录
接口设计:
arraylist:范型容器
ArrayList<String> notes=new ArrayList<String>();容器类有两个类型:容器的类型、元素的类型
ArrayList有顺序的,下标索引从0开始。ArrayList的操作
public class NoteBook {
private ArrayList<String> notes=new ArrayList<String>();
public void add(String s) {
//ArrayList的add方法
notes.add(s);
}
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) {
// TODO Auto-generated method stub
String[] aStrings=new String[2];
aStrings[0]="first";
aStrings[1]="second";
NoteBook noteBook=new NoteBook();
noteBook.add("first");
noteBook.add("second");
noteBook.add("third",1);
System.out.println(noteBook.getSize());
System.out.println(noteBook.getNote(0));
System.out.println(noteBook.getNote(1));
noteBook.removeNote(1);
String[] a=noteBook.list();
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
} }
}
3.2. 对象数组
foreach循环
class Value{
private int i;
public void set(int i) {this.i=i;}
public int get() {return i;}
}
public static main(){
Value[] aValues=new Value[10];
for (int i = 0; i < aValues.length; i++) {
aValues[i]=new Value();
aValues[i].set(i);
}
for (Value v : aValues) {
System.out.println(v.get());
}}
此时程序输出0,1,2,3,4,5,6,7,8,9,
Value[] aValues=new Value[10];
for (int i = 0; i < aValues.length; i++) {
aValues[i]=new Value();
aValues[i].set(i);
}
for (Value v : aValues) {
System.out.println(v.get());
v.set(0);
}
for (Value v : aValues) {
System.out.println(v.get());
}
则此时程序输出0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,0,0,0
此时foreach循环中,每个v相当于复制了数组中的a[i],也是对象的管理者,所以可以对对象进行操作。foreach也应用于arraylist集合。
3.3. 集合容器(Set)
集合就是数学中的集合的概念:所有的元素都具有唯一的值,元素在其中没有顺序。使用方法与arraylist类似,与此相比则集合中元素唯一且无序只要在Java类中声明定义public String toString 的方法,则在printf中可直接使用类对象,会自动调用你定义的toString方法。
ArrayList< String> arrayList=new ArrayList<String>();
arrayList.add("first");
arrayList.add("second");
arrayList.add("first");
System.out.println(arrayList);
System.out.println("---------");
HashSet< String> set=new HashSet<String>();
set.add("first");
set.add("second");
set.add("first");
System.out.println(set);
输出:
3.4.散列表(Hash)
传统意义上的Hash表,是能以int做值,将数据存放起来的数据结构。Java的Hash表可以以任何实现了hash()函数的类的对象做值来存放对象,hash表是以一对值进行存储的(key,value)coin对应:1美分(penny) 5美分(nickel)10美分(dime)25美分(quarter)50美分(half-dollar)查找应兵名称程序
public class Coin {
private HashMap<Integer, String> coinnames=new HashMap<Integer,String>();
public Coin() {
// TODO Auto-generated constructor stub
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());
System.out.println(coinnames);
}
public String getName(int amount) {
if (coinnames.containsKey(amount)) {
return coinnames.get(amount);
}else {
return "NOT FOUND";
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
java.util.Scanner in=new java.util.Scanner(System.in);
int amount=in.nextInt();
Coin coin=new Coin();
String name =coin.getName(amount);
System.out.println(name);
}
}
for (Integer k : coinnames.keySet()) {
String string=coinnames.get(k);
System.out.println(string);
}
3.5.练习:查找里程
你的程序要读入这样的一张表,然后,根据输入的两个城市的名称,给出这两个城市之间的里程。
输入格式:
首先,你会读到若干个城市的名字。每个名字都只是一个英文单词,中间不含空格或其他符号。当读到名字为“###”(三个#号)时,表示城市名字输入结束,###并不是一个城市的名字。如果记读到的城市名字的数量为n。
然后,你会读到nxn的一个整数矩阵。第一行的每一个数字,表示上述城市名单中第一个城市依次到另一个城市之间的里程。表中同一个城市之间的里程为0。
最后,你会读到两个城市的名字。
输出格式:
输出这两个城市之间的距离。
class FindMileage {
private java.util.HashMap<String, Integer> map=new java.util.HashMap<String,Integer>();
private int [][] Mileage;
private static java.util.Scanner in=new java.util.Scanner(System.in);
public int getValue(String key) {
return map.get(key);
}
public void input() {
int count=0;
while(true) {
String temp=in.next();
if (temp.equals("###") == true) {
break;
}
map.put(temp, count);
count++;
}
Mileage=new int[ map.keySet().size()][ map.keySet().size()];
for (int i = 0; i < Mileage.length; i++) {
for (int j = 0; j < Mileage.length; j++) {
Mileage[i][j]=in.nextInt();
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
FindMileage findMileage=new FindMileage();
findMileage.input();
int start=findMileage.getValue(in.next());
int end=findMileage.getValue(in.next());
int result=findMileage.Mileage[start][end];
System.out.println(result);
in.close();
}
}