Java 对象容器
一、ArrayList 容器
1、记事本
package booknote; import java.util.ArrayList; public class NoteBook { private ArrayList<String> notes=new ArrayList<String>();//引入ArrayList类,容器;包括容器类型,内容类型 public void add(String s)//增加字符串 { notes.add(s);//ArrayList 自带的add } public void add(String s, int location)// add 函数重载 { notes.add(location, s); } public int getSize()//得到字符串的个数 { return notes.size(); } public String getNote(int index)//获取第n个字符 { return notes.get(index); } public void removeNote(int index)//删除 注意void 不返回值就可以了 { 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); //黄色和绿色都可以实现将notes中的字符串赋给 字符串数组a中,一个是使用遍历的方法,一个是使用自带函数 return a; } public static void main(String[] args) { NoteBook nb=new NoteBook(); nb.add("first"); nb.add("second "); nb.add("third",0);//插入到0位置 String[] a=nb.list(); for(String s:a) { System.out.println(s); } System.out.println(nb.getNote(0));//得到0位置的字符串 System.out.println("\n"); nb.removeNote(0);//删除0位置元素 System.out.println(nb.getSize()); a=nb.list();//刷新a for(String s:a) { System.out.println(s); } } }
2、对象数组
package Hello; public class hello { public int SUM(int a,int b)//必须创建对象调用 { return a+b; } public static int Sum(int a,int b)//static 方便在没有创建对象的情况下调用 { return a+b; } public static void main(String[] args) { // TODO Auto-generated method stub int x=10; int y=5; hello num=new hello(); System.out.println(Sum(x,y));//直接调用就可以 System.out.println(num.SUM(x,y));//必须创建对象,利用 对象.函数 才可以 } }
3、对象数组和普通数组赋值差异
package Hello; class Value{ //新建类这样建 private int i; public void set(int i) { this.i=i; } public int get() { return i; } } public class hello { 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.print(v.get()+" "); v.set(0); } System.out.println(); for(Value v:a) { System.out.print(v.get()+" "); } } }
package Hello; public class test { public static void main(String[] args) { int[] a=new int[10]; for(int i=0;i<a.length;i++) { a[i]=i; } for(int v:a) { System.out.print(v+" "); v=0;//无效 } System.out.println(); for(int v:a) { System.out.print(v+" "); } System.out.println(); for(int i=0;i<a.length;i++) { a[i]=0; } for(int v:a) { System.out.print(v+" "); } } }
可以看到在对象数组中for each可以改变赋值
但是在普通数组中 for each 不可以改变赋值。
这是因为,对象数组中指向的是对象的位置,可以改变对象的位置上的值。而int[]这类数组,指向的是数组上的值,不能通过值改变值。
4、
package Hello; class Value{ //新建类这样建 private int i; public void set(int i) { this.i=i; } public int get() { return i; } // public String toString() //转化为字符串输出 // { // return ""+i; // } } public class hello { public static void main(String[] args) { Value[] a=new Value[5]; for(int i=0;i<a.length;i++) { a[i]=new Value(); a[i].set(i); } for(Value v:a) { System.out.println(v); } } }
得到的其实是位置。
加入public String toString()后程序如下图
package Hello; class Value{ //新建类这样建 private int i; public void set(int i) { this.i=i; } public int get() { return i; } public String toString() //转化为字符串输出 { return ""+i; } } public class hello { public static void main(String[] args) { Value[] a=new Value[5]; for(int i=0;i<a.length;i++) { a[i]=new Value(); a[i].set(i); } for(Value v:a) { System.out.println(v); } } }
二、set容器
package Hello; import java.util.ArrayList; import java.util.HashSet; public class test { public static void main(String[] args) { ArrayList<String> s=new ArrayList<String>(); s.add("first"); s.add("second"); s.add("first"); for(String a:s) { System.out.println(a); } System.out.println(s); System.out.println("************************"); HashSet<String> s1=new HashSet<String>(); s1.add("first"); s1.add("second"); s1.add("first"); s1.add("airst"); for(String a:s1) { System.out.println(a); } System.out.println(s1); } }
HashSet容器可以去重并且排序。
三、Hashmap
可以利用HashMap生成键值对。
package coins; import java.util.HashMap; import java.util.Scanner; public class coin { private HashMap<Integer,String> coinnames=new HashMap<Integer,String>();//Integer是int 的包裹类型 //public void Coin() public coin() { coinnames.put(1,"penny"); coinnames.put(10,"dime"); coinnames.put(25,"quarter"); coinnames.put(50,"half-dolar"); coinnames.put(50,"yuan"); System.out.println("********************"); System.out.println(coinnames);//输出HashMap集合 System.out.println(coinnames.keySet());//输出键集合 System.out.println(coinnames.values());//输出值集合 System.out.println(coinnames.values().size());//键(值)长度 System.out.println("********************"); for(Integer i:coinnames.keySet()) { System.out.print(i+" "); } System.out.println("\n********************"); for(String i:coinnames.values()) { System.out.print(i+" "); } System.out.println("\n********************"); for(Integer i:coinnames.keySet()) { System.out.print(coinnames.get(i)+" "); } System.out.println("\n********************"); } 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 Scanner in=new Scanner(System.in); int n=in.nextInt(); coin money=new coin(); //money.Coin(); System.out.println(money.getName(n)); in.close(); } }
黄色部分,既可以直接用原类来增加键值对(public coin),
也可以通过构造函数(public void Coin)来增加,如果利用构造函数的话,必须得调用函数才行。
再有注意他们输出的方法。