集合补充 数字日期字符串格式化 第五讲091205A

1)Date(*,*,*)构造方法已经不推荐使用。
2)Calendar是抽象类,需要getInstance()去引用。
3)可以认为c为一个显示日期时间等信息的数组,Calendar.MONTH为一个在c数组显示月份的数组下标,(11表示12月,0表示1月份)
4)浏览器建议改c.MONTH为Calendar.MONTH,因为这个是常量了。

TestDate.java

import java.util.Calendar;
import java.util.Date;

public class TestDate {
public static void main(String[] args) {
Date a = new Date(80, 7, 1); //(1)
Date b = new Date();
System.out.println((b.getTime() - a.getTime()) / 1000 / 60 / 60 / 24/ 365);

Calendar c = Calendar.getInstance();//(2)
System.out.println(c.get(Calendar.MONTH)); //(3)
System.out.println(c.MONTH); //(4)
c.set(c.MONTH,4);
System.out.println(c);

}
}

输出:
29
11
2
java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,
minimalDaysInFirstWeek=1,ERA=1,YEAR=2009,[b]MONTH=4[/b],WEEK_OF_YEAR=50,WEEK_OF_MONTH=2,DAY_OF_MONTH=7,
DAY_OF_YEAR=341,DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=1,AM_PM=1,HOUR=11,HOUR_OF_DAY=23,MINUTE=16,
SECOND=23,MILLISECOND=203,ZONE_OFFSET=28800000,DST_OFFSET=0]

----------------------------------------------------------------------
1)字符串格式化时候,“%2$-10s”,其中2表示第二个元素,-10负数表示向左对齐10个长度。
2)fmt2.format 推荐改为String.format

TestFormat.java
日期格式化,数字格式化,字符串格式化

import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

public class TestFormat {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
Date d = new Date();
System.out.println(sdf.format(d));

double num = 111123.4567;
DecimalFormat df1 = new DecimalFormat("###.00KM");
System.out.println(df1.format(num));

String fmt1 = "%1$10s";
String fmt2 = "%1$-10s%2$-10s";//(1)
String[] txt = { "hello", "aaaaa" };
System.out.println(String.format(fmt1, "hello"));
System.out.println(fmt2.format(fmt2, txt)); //(2)
System.out.println(fmt2.format("%1$-10s%2$-10s", "a", "b"));
}
}

输出:
2009年12月07日 23:35:03
111123.46KM
hello
hello aaaaa
a b
----------------------------------------------------------------------
1) 定义为父类Collection,有利于重用
2) coll1与coll2求交集,并把结果赋给coll2。coll2中的数据若发生变化,返回false
3)每次new的person是哈希码值是不同的,所以,a中添加两个person。可以在Person中重写hashcode方法。
4)迭代器使用例子,相当于for in循环。iterator.hasNext();iterator.next();两个常见方法


TestCollection
多种集合使用举例

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class TestArrayList {
public static void main(String[] args) {

ArrayList<String> ar = new ArrayList<String>();
ar.add("111");
ar.add("222");
ar.add("333");
System.out.println(ar);
System.out.println(ar.size());

ArrayList<Person> a2 = new ArrayList<Person>();
a2.add(new Person("tom", 24));
a2.add(new Person("alex", 34));
System.out.println(a2);

HashMap<String, Person> hm = new HashMap<String, Person>();
hm.put("zg", new Person("曾轶可", 18));
hm.put("cg", new Person("李宇春", 16));
Person x = hm.get("zg");
System.out.println(x);
System.out.println(hm);

Collection<String> coll1 = new ArrayList<String>();//(1)
Collection<String> coll2 = new ArrayList<String>();
coll1.add("a");
coll1.add("b");
coll1.add("c");
coll2.add("b");
coll2.add("c");
coll2.add("d");
System.out.println(coll2.retainAll(coll1)); //(2)
System.out.println("coll2 = "+coll2);

Set<Object> a = new HashSet<Object>();
a.add(new Person("q", 123));//(3)
a.add(new Person("q", 123));
a.add(123);
a.add(123);
a.add("222");
a.add("222");
System.out.println(a);

Set<String> s = new HashSet<String>();
s.add("ddd");
s.add("www");
s.add("qqq");
String string;
Iterator<String> it = s.iterator();//(4)
while (it.hasNext()) {
string = it.next();
System.out.println(string);
}
}
}

输出:
[111, 222, 333]
3
[tom|24, alex|34]
曾轶可|18
{zg=曾轶可|18, cg=李宇春|16}
false
coll2 = [b]
[222, q|123, q|123, 123]
qqq
ddd
www
----------------------------------------------------------------------
购书小程序,有4类书可供选择。
有三个类文件(Book,BookItem,BookCar),通过相互调用实现。

Book.java
Book类,只含三个属性

public class Book {
String id;
String name;
int price;

public Book(String id, String name, int price) {
super();
this.id = id;
this.name = name;
this.price = price;
}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getPrice() {
return price;
}

public void setPrice(int price) {
this.price = price;
}

}


BookItem.java
BookItem类,含一个BOOK属性和一个购买数量的属性

public class BookItem {
Book bk;
int count;

public BookItem(Book bk, int count) {
super();
this.bk = bk;
this.count = count;
}

public Book getBk() {
return bk;
}

public void setBk(Book bk) {
this.bk = bk;
}

public int getCount() {
return count;
}

public void setCount(int count) {
this.count = count;
}

}


BookCar.java

import java.util.*;

public class BookCar {
public static void main(String[] args) {
String id;
BookItem bi = null;
Set<String> ids = null;
Map<String, BookItem> car = new HashMap<String, BookItem>();
while (true) {
System.out.println("");
//System.out.println(ids);
System.out.println("输入要买的书101,102,103,104");
Scanner s = new Scanner(System.in);
String data = s.next();
if (data.equals("q"))
break;
id = data;
ids = car.keySet();

if (ids.contains(id)) {
bi = car.get(id);
bi.setCount(bi.getCount() + 1);
} else {
Book book = null;
if (id.equals("101"))
book = new Book("101", "java1", 15);
else if (id.equals("102"))
book = new Book("102", "java2", 25);
else if (id.equals("103"))
book = new Book("103", "java3", 45);
else if (id.equals("104"))
book = new Book("104", "java4", 40);
car.put(id, new BookItem(book, 1));
}
}

System.out.println("购书清单如下");
for (String it : ids) {
BookItem bi1 = car.get(it);
System.out.println(String.format("%1$-10s%2$-10s%3$-10s%4$-10s",
bi1.getBk().getId(), bi1.getBk().getName(), bi1.getBk()
.getPrice(), bi1.getCount()));
}
}
}

输出:
输入要买的书101,102,103,104
101

输入要买的书101,102,103,104
102

输入要买的书101,102,103,104
103

输入要买的书101,102,103,104
102

输入要买的书101,102,103,104
q
购书清单如下
103 java3 45 1
102 java2 25 2
101 java1 15 1

----------------------------------------------------------------------
1)泛型也可以这样定义--用变量表示
Pair.java
特殊的泛型使用方法

public class Pair<A, B> {;//(1)
A k;
B v;

public Pair(A k, B v) {
super();
this.k = k;
this.v = v;
}

public A getK() {
return k;
}

public void setK(A k) {
this.k = k;
}

public B getV() {
return v;
}

public void setV(B v) {
this.v = v;
}

@Override
public String toString() {

return k+"@"+v;
}

}


PairTest.java


public class PairTest {
public static void main(String[] args) {
Pair<Integer, String> pr = new Pair<Integer, String>(1, "北京");//(1)
Pair<String, Person> ps = new Pair<String, Person>("汉族", new Person("李宇春", 1)); //(1)
System.out.println(pr);
System.out.println(ps);
}
}

输出:
1@北京
汉族@李宇春|1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值