java进阶--第3章 对象容器

3.1 顺序容器

3.1.1 java 记事本

要求:

(1)、存记录

(2)、 不能限制能存储的记录的数量

(3)、 能知道已经存储的记录的数量

(4)、 能查看存进去的每一条记录

(5)、 能删除一条记录

(6)、 能列出所有的记录

接口设计:

(1)、add(String note);

(2)、getSize();

(3)、getNote(int index);

(4)、removeNote(int index);

(5)、list();

/**
 * 记事本-后端代码
 */
package notebook;  //在notebook这个包中

import java.util.ArrayList;//调用工具类中的ArrayList容器

public class NoteBook {   //NoteBook 类
	private ArrayList<String> notes = new ArrayList<String>();
    //泛型类 用来存放String的ArrayList类
	//泛型类是一种容器
	
	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) ; //返回ArrayList中第index条消息信息
	}
	
	public void removeNote(int index) {  //删除某条
		notes.remove(index); //删除第index条信息
	}
	
	public String[] list() {   //展示所有备忘录
		String[] a = new String[notes.size()];
		notes.toArray(a); 
        /**
        以正确的顺序(从第一个元素到最后一个元素)返回包含此列表中所有元素的数组。返回的数组将是“安全的”,因为         此列表不维护对它的引用。 
        (换句话说,这个方法必须分配一个新数组)。 因此,调用者可以自由修改返回的数组。此方法充当基于数组的           API 和基于集合的 API 之间的桥梁。
        指定者:List 中的 toArray(),覆盖:AbstractCollection 中的toArray()
        返回:包含此列表中所有元素的数组,顺序不正确
        **/
		return a;
	}
	
	public static void main(String[] args) {//程序的入口
		// TODO Auto-generated method stub

		NoteBook nb = new NoteBook(); //创建对象
		nb.add("ahdja"); //增加备忘录
		nb.add("duiq");
		System.out.println(nb.getSize());   //展示条数
	    nb.add("bdhja",1);
	   
	    System.out.println("***********************");//分割线,便于直观的查看结果
		System.out.println(nb.getNote(0));  
		System.out.println(nb.getNote(1));
		System.out.println(nb.getNote(2));
		 nb.removeNote(1);
		System.out.println("**********************");
		String[] a = nb.list();   //创建String数组,将所有备忘录放进这个数组中
		for(String s :a) {  //for-each 将所有备忘信息打印出来
			System.out.println(s);  //输出
		}
		System.out.println("****************");//分割
		
		
	}

}

1、 接口

2、 容器类

//其中一种
ArrayList<String> notes = new ArrayList<String>;
//用来存放对象

(1)、 容器类有两个类型

.容器的类型

.元素的类型

数组可以看作是一种容器,但是数组的元素个数一旦确定就无法改变,这在实际使用中是很大的不足。一般意义上的容器,是指具有自动增长容量能力的存放数据的一种数据结构。在面向对象语言中,这种数据结构本身表达为一个对象。所以才有“放东西的东西”的说法。

3.2 对象数组

3.2.1 对象数组

当数组的元素的类型是类的时候,数组的每一个元素其实只是对象的管理者而不是对象本身。因此,仅仅创建数组并没有创建其中的每一个对象!

public static void main(String[] args){  //程序的入口
    int[] ia = new int[10];  //int型数组,名称为ai,长度为10
    String[] a = new String[10];  //String型数组,名称为a,长度为10
    for(int i=0;i<a.length;i++){  //将0-9这几个数依次放入a这个数组中
        a[i]=""+i;
    }
    System.out.println(ia[0]+2); //输出ia这个数组 第0位置上所管理的值与2相连 所组成的值
    System.out.println(a[0].length()); //输出a这个数组的第0位所管理的字符串的长度
    System.out.println(a[0]);//输出a这个数组的第0位置所管理的字符串
}  //输出:2 1 0

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

3.2.2 for-each

/** for-each
for(int k :ia){ //打印数组中每一个元素  
    
    System.out.println(k);  //将ia这个数组所管理的值依次打印出来
}
**/
public class Value {
​
    private int i;  //成员变量
    public void set(int i) { //成员函数
        this.i =i; // 将传入的值赋给成员变量
    }
    
    public int get() { //获取这个i的值
        return i; //返回i值
    }
    
    public static void main(String[] args) { //程序的入口
        // TODO Auto-generated method stub
​
        Value[] a = new Value[10];  //创建数组
        for(int i =0;i<a.length;i++) {
            a[i]=new Value();   //创建对象  让a这个数组中的每一个下标去管理某一个值
            a[i].set(i);        //将这个值存储进去(有点抽象)
        }
        for(Value v : a) {
            System.out.println(v.get()); //先输出了v中的值,a[0]指向(管理)了v1这个值,
            v.set(0);//后将v中的值替换为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
​

(用鼠标画的,还请见谅) 

3.3 集合容器(Set)

集合就是数学中的集合的概念:所有的元素都具有唯一的值,元素在其中没有顺序。

HashSet<String> s = new HashSet<String>();//集合
//集合中的元素是各不相同的
s.add("sdb");
s.sdd("hbdiw");
s.add("sdb");
System.out.println(s);// 打印容器中的信息
/**
*输出:
*[hbdiw,sdb]
**/
/*********************************************************************/
//toString
class Value{
    private int i;
    public void set(int i) {
        this.i =i;
    }
    
    public int get() {
        return i;
    }
    
    public String toString(){  //没有这个,输出为:notbook.Value@22998b08
        return ""+ i;//把i变成字符串
    }//任何一个java类,public返回是String的会自动调用toString函数
    public static void main(String[] args) {
        Value a = new Value();
        v.set(10);
        System.out.println();
        // 输出: 10 
    }
}

3.4 散列表(Hash)

传统意义上的Hash表,是能以int做值,将数据存放起来的数据结构。Java的Hash表可以以任何实现了hash()函数的类的对象做值来存放对象。

Hash表是非常有用的数据结构,熟悉它,充分使用它,往往能起到事半功倍的效果。

/**
 * 优雅永不过时
 * 
 */
​
package notebook;
​
import java.util.HashMap;//调用工具类中的HashMap容器
import java.util.Scanner;//
​
public class Coin {
​
     private HashMap<Integer,String>coinnames = new HashMap<Integer,String>();//HashMap容器
     
     public Coin() {  
         coinnames.put(1,"penny");//初始化
         coinnames.put(10,"dime");
         coinnames.put(25,"quarter");
         coinnames.put(50,"half-dolor");
         coinnames.put(50,"五毛");
         
//       System.out.println(coinnames.keySet().size());
//       System.out.println(coinnames);
//       
//       for(Integer k : coinnames.keySet()) {//遍历Coin
//           String s =coinnames.get(k);
//           System.out.println(s);
//       }
     }
     
     public String getName(int amount) { //输入金额,获取名字
         if(coinnames.containsKey(amount)) { //有则输出,无则NOT FOUND
             return coinnames.get(amount);
         }else {
             return "NOT FOUND";
         }
        
     }
     
    public static void main(String[] args) { //程序的入口
        // TODO Auto-generated method stub
​
        Scanner in = new Scanner(System.in);  
        System.out.println("请输入金额:");
        int amount = in.nextInt();    //输入金额
        Coin coin = new Coin();       //创建对象
        String name = coin.getName(amount);  //将获得的名称存入name这个字符串中,然后打印
        System.out.println(name);
    }
​
}
​

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值