Java 对象容器

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);
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值