Java基础——对象容器(顺序、集合、Hash)

 

扩展:

For-each循环

for (String s: str) {
System.out.println(s);

}

 

等同于
for (int i = 0; i < str.length; i++) {
      String s = str[i];
      System.out.println(s);
}

J2SE 1.5提供的另一种形式的for循环,可以用来处理不知道str长度的情况

 

顺序容器

泛型容器类 ArrayList

ArrayList<String> notes = new ArrayList<String>

容器的类型ArrayList  元素的类型String

 

 

例子:

package notes;

 

import java.util.ArrayList;

 

public class NotesBook {

 

private ArrayList<String> notes = new ArrayList<String>(); //创建容器:notes

 

public void add(String s){ //添加方法

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) {

 

NotesBook nb = new NotesBook();

nb.add("first");

nb.add("second");

nb.add("thrid", 1);

System.out.println(nb.getSize());

 

System.out.println(nb.getNote(1));

System.out.println("remove后-------------------------");

nb.removeNote(1);

 

String[] a =nb.list();

for(String s : a){ //处理不知道s长度的情况

System.out.println(s);

}

}

}

 

对象数组

对象数组中的每个元素都是对象的管理者而非对象本身。

For-each循环

class Value{

private int i;

public void set(int i){

this.i=i;

}

public int get(){

return i;

}

}

....

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); //在此设置为0

}

for(Value v : a){

System.out.println(v.get());

}

}

}

 

 

容器类也是可以使用for-each

ArrayList<String> b = new ArrayList<String>();

b.add("first");

b.add("second");

for (String s : b){

System.out.println(s);

}

 

集合容器(set) 就是数学上的集合set(唯一性 没有排序)

格式:HashSet<String> s = new HashSet<String>();

区别:

ArrayList<String> b = new ArrayList<String>();

b.add("first");

b.add("second");

b.add("first");

for (String s : b){

System.out.println(s);

}

 

System.out.println("------我是分割线------");

 

HashSet<String> s = new HashSet<String>();

s.add("F1");

s.add("S2");

s.add("F1");

for(String k : s){

System.out.println(k);

}

 

更加直观的直接输出s 结果如下:

 

而这两个容器包括了普通如上value类中加了(public String toString(){return “”+i}

 

Hash表 也叫做散列表HashMap<k,v> 键是唯一的输出最后一个

JavaHash表可以以任何实现了hash()函数的类的对象做值来存放对象。

private HashMap<Integer,String> cname = new HashMap<Integer,String>();

 

 

package notes;

 

import java.util.HashMap;

import java.util.Scanner;

 

public class Corn {

private HashMap<Integer,String> cname = new HashMap<Integer,String>();

 

public Corn(){ //构造

cname.put(1, "penny");

cname.put(10, "dime");

cname.put(25, "quarter");

cname.put(50, "half-dolar");

 

System.out.println(cname.keySet().size());

 

for(Integer k: cname.keySet()){

String s =cname.get(k);

System.out.println(s);

}

}

public String getName( int amount){

if(cname.containsKey(amount)){

return cname.get(amount);

}else{

return "NOT FOUND";

}

}

public static void main(String[] args) {

Scanner in = new Scanner(System.in);

int amount =in.nextInt();

Corn corn =new Corn();

String name= corn.getName(amount);

System.out.println(name);

}

}

 

posted @ 2017-03-20 16:36  lusCodding  阅读(757)  评论(0编辑  收藏  举报