public class MapTest { public static void main(String[] args) { HashMap<PerId,Person> hm=new HashMap<PerId,Person>(); hm.put(new PerId(0001), new Person("周鹏程1",25)); hm.put(new PerId(0002), new Person("周鹏程2",25)); hm.put(new PerId(0003), new Person("周鹏程3",26)); hm.put(new PerId(0004), new Person("周鹏程",27)); hm.put(new PerId(0005), new Person("周鹏程",27)); System.out.println(hm.containsKey(new PerId(0004))); System.out.println(hm.containsValue( new Person("周鹏程1",25))); System.out.println(hm.remove(new PerId(0001))); for(Object o:hm.keySet()){ System.out.println(hm.get(o).name); } } } class Person{ String name; int age; public Person(String name,int age){ this.name=name; this.age=age; } public boolean equals(Object obj){ if(obj==this){ return true; } if(obj!=null&&obj.getClass()==Person.class){ Person p=(Person)obj; if(p.age==this.age&&p.name==this.name){ return true; } } return false; } } class PerId{ int id; public PerId(int id){ this.id=id; } public boolean equals(Object obj){ if(obj==this){ return true; } if(obj!=null&&obj.getClass()==PerId.class){ PerId p=(PerId)obj; if(p.id==this.id){ return true; } } return false; } //假如没有重写hashCode方法将会出现问题 public int hashCode(){ return id; } }
import java.io.*; import java.util.*; public class TestProperties { public static void main(String[] args)throws Exception { Properties props=new Properties(); props.setProperty("username", "zpc"); props.setProperty("password", "123456"); //将Properties中的属性保存到a.ini对象中 props.store(new FileOutputStream("a.ini"), "comment line(属性文件)"); Properties props2=new Properties(); props2.setProperty("gender", "male"); props2.load(new FileInputStream("a.ini")); System.out.println(props2); } } //输出:{password=123456, gender=male, username=zpc}
public static void main(String[] args) { IdentityHashMap ihm=new IdentityHashMap(); ihm.put(new String("语文"),89); ihm.put(new String("语文"),78); ihm.put("java",89); ihm.put("java",89); System.out.println(ihm); }//“java”字符串是字符串直接量,放在缓存,而new的两个对象用==比较不等
//showHand游戏 import java.util.*; class ArrayUtils { /** * 定义一个工具方法,工具方法从字符串数组中找到对应的字符串元素的位置 * * @param array * 搜索的数组 * @param target * 搜索的字符串 * @return 目标字符串出现的位置,-1表明找不到 */ public static int search(String[] array, String target) { for (int i = 0; i < array.length; i++) { if (array[i] != null && array[i].equals(target)) { return i; } } return -1; } } public class ShowHand { private final int PLAY_NUM = 4;// 限定玩家数量 private String[] types = { "\4 ", "\5", "\3", "\6" };//特殊字符,会在控制台打印出方块、草花、红心和黑桃 private String[] values = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A" }; // cards存放牌 private List<String> cards = new LinkedList<String>(); // 用一个数组存放玩家 private String[] players = new String[PLAY_NUM]; // 每一个玩家都用一个List存放其获得的牌 private List<String>[] playersCards = new List[PLAY_NUM]; // 初始化,放入扑克牌 public void initCards() { for (int i = 0; i < types.length; i++) { for (int j = 0; j < values.length; j++) { cards.add(types[i] + values[j]); } } // 调用集合工具类的方法随机排列 Collections.shuffle(cards); } // 初始化玩家,为每个玩家分配用户名 public void initPlayer(String... names) { if (names.length < 2 || names.length > PLAY_NUM) { System.out.println("输入玩家数量不对!"); return; } else { // 初始化用户 for (int i = 0; i < names.length; i++) { players[i] = names[i]; } } } // 初始化保存玩家牌的List public void initPlayerCards() { for (int i = 0; i < players.length; i++) { if (players[i] != null && !players.equals("")) { playersCards[i] = new LinkedList<String>(); } } } // 写一个输出全部扑克牌的方法 public void showAllCards() { for (String card : cards) { System.out.println(card); } } // 给玩家派牌的方法(指定一个最先派牌的玩家) public void deliverCard(String first) { int firstPos = ArrayUtils.search(players, first); //依次给位于指定玩家之后、之前的每个玩家派牌 for(int i=firstPos;i<players.length;i++){ if(players[i]!=null){ playersCards[i].add(cards.get(0)); cards.remove(0); } } //为之前的每个玩家派牌 for(int i=0;i<firstPos;i++){ if(players[i]!=null){ playersCards[i].add(cards.get(0)); cards.remove(0); } } } //输出玩家手中的牌 public void showPlayerCards(){ System.out.print("当前牌况:"); for(int i=0;i<players.length;i++){ if(players[i]!=null){ System.out.println("\n"+players[i]+":"); for(String card:playersCards[i]){ System.out.print (card+"\t"); } } } System.out.print("\n"); } public static void main(String[] args) { ShowHand sh = new ShowHand(); sh.initCards(); sh.initPlayer("鸟鹏", "鸟朱"); sh.initPlayerCards(); sh.showAllCards(); System.out.println("*****************"); //第一次从玩家鸟鹏开始派牌 sh.deliverCard("鸟鹏"); sh.showPlayerCards(); //第二次从玩家鸟朱开始派牌 sh.deliverCard("鸟朱"); sh.showPlayerCards(); } }
22、泛型:JDK1.5支持的泛型很大程度上是为了让集合能记住其元素的类型,这样会带来许多好处(Java泛型可以保证如果程序在编译的时候没有警告,运行时就不会产生ClassCastException异常,集合中默认存放的都是object对象,取出来还得强制转型,使用泛型就不要了)。
//一个泛型的案例 public class Apple<T> { private T info; public Apple() { } public Apple(T info){ this.info=info; } public T getInfo(){ return info; } public static void main(String[] args){ //因为传给T形参的是String实际类型,所以构造器的参数只能是String Apple<String> apple1=new Apple<String>("苹果"); System.out.println(apple1.getInfo()); System.out.println(apple1.getClass()); Apple<Double> apple2=new Apple<Double>(12.9); System.out.println(apple2.getInfo()); System.out.println(apple2.getClass()); } } //输出 //苹果 //12.9
泛型数组(Java允许创建无上限的通配符泛型数组):
List<?>[] lsa= new ArrayList<?>[10]; Object[] oa=(Object[])lsa; List<Integer> li=new ArrayList<Integer>(); li.add(new Integer(7)); oa[1]=li; System.out.println("lsa.getClass():"+lsa.getClass()); System.out.println("lsa[1].get(0).getClass():"+lsa[1].get(0).getClass()); //String s=(String)lsa[1].get(0);//List的get方法 Object target=lsa[1].get(0); if(target instanceof String){ String s=(String)target; }
24、使用类型通配符
(设定类型通配符的上限)比如List<? extends Shape>表示所有Shape泛型List的父类,List集合的元素要么是Shape类型的要么是Shape的子类型都行例程: abstract class Shape{ public abstract void draw(Canvas c); } class Circle extends Shape{ @Override public void draw(Canvas c) { System.out.println("在画布"+c+"画一个圆"); } } class Rectangule extends Shape{ @Override public void draw(Canvas c) { System.out.println("在画布"+c+"画一个矩形"); } } public class Canvas { //同时在画布上绘制多个形状 //使用被限制的泛型通配符 public void drawAll(List<? extends Shape> shapes){ for(Shape s:shapes){ s.draw(this); } } public static void main(String[] args) { List<Circle> circleList=new ArrayList<Circle>(); List<Rectangule> rectangule=new ArrayList<Rectangule>(); circleList.add(new Circle()); rectangule.add(new Rectangule()); Canvas c=new Canvas(); c.drawAll(circleList); c.drawAll(rectangule); } }