国际化,枚举,集合框架,set接口

1.Java语言的国际化

1.Java程序的国际化主要通过如下3个类完成。
java.util.Locale:对应一个特定的国家/区域的语言环境。 
java.util.ResourceBundle:用于加载一个资源包。 
java.text.MessageFormat:用于将消息格式化。 

2.资源文件的命名规则
base_language_country.properties
base表示的是文件的基本名称
language表示的是语言代码
country表示的是国家代码

国际化实际上就是通过加载不同的语言包来实现的。

3.ResourceBundle类根据特定的语言环境加载对应的资源包,ResourceBundle类的常用方法包括以下几个。
(1) public static final ResourceBundle getBundle(String baseName, Locale locale),其中,baseName代表资源包基本名;locale代表特定的语言环境实例。
(2) public final String getString(String key),用来从此资源包中获取给定键的字符串资源包对应的文件就是存储“键-值”对的properties文件

4.java.text.MessageFormat类
MessageFormat类提供了一种与语言环境无关的方式来组装消息,它允许在运行时刻用指定的参数值来填充消息模式串中的占位符。消息模式串中的占位符格式为:{0}、{1}、{2}、…
MessageFormat类的常用方法包括以下几个。
(1) public static String format(String pattern, Object... arguments),表示用指定的参数值填充消息模式串中的占位符,并返回最终结果。 
(2) public final StringBuffer format(Object[] arguments, StringBuffer result, FieldPosition pos)表示格式化一个对象数组,并将 MessageFormat 的模式追加到所提供的 StringBuffer,用格式化后的对象替换格式元素。
(3) public final StringBuffer format(Object arguments, StringBuffer result, FieldPosition pos)格式化一个对象数组,并将 MessageFormat 的模式追加到所提供的 StringBuffer,用格式化后的对象替换格式元素。

例:msg.properties文件

name=\u5F20\u4E09
age=20
address=\u5317\u4EAC
welcome=\u6B22\u8FCE\uFF0C\u3010{0}\u3011\u4ECA\u5929\u7684\u65E5\u671F\u662F\u3010{1}\u3011

msg_en_US.properties文件

name=Zhangsan
age=20
address=Beijing
welcome=welcome,[{0}],Today is[{1}]

msg_zh_CN.properties文件

name=\u5F20\u4E09
age=20
address=\u5317\u4EAC
welcome=\u6B22\u8FCE\uFF0C\u3010{0}\u3011\u4ECA\u5929\u7684\u65E5\u671F\u662F\u3010{1}\u3011

java文件1

import java.util.Locale;
import java.util.ResourceBundle;
/**
 * @author 
 * 国际化
 */
public class Test1 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//指定语言或国家
Locale loc=Locale.CANADA;
System.out.println(loc);
//绑定资源文件
ResourceBundle bundle=ResourceBundle.getBundle("msg", loc);
String name=bundle.getString("name");
String age=bundle.getString("age");
String address=bundle.getString("address");
System.out.println(name+age+address);
}
}

java文件2

import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.ResourceBundle;
/**
 * @author 
 *
 */
public class Test2 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Locale loc=Locale.US;

ResourceBundle bundle=ResourceBundle.getBundle("msg", loc);
String value=bundle.getString("welcome");
SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd");

String str=MessageFormat.format(value, "张三",new Date());
System.out.println(str);
}
}


2.枚举

枚举是一种数据类型(枚举其实就是一个class)
为什么需要枚举:如果一个对象或变量的取值只能是指定范围中的一个,就可以用枚举来解决。
语法:
[访问修饰符] enum 枚举类{

}

例:

/**
 * @author wx
 * 枚举
 */
public class Test7 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
final int NUM1=1,NUM2=2,NUM3=3;
Test7 t=new Test7();
// t.display2();
System.out.println(t.hashCode());
}
public void display(int num){
switch(num){
case 1:System.out.println("到家");
break;
case 2:System.out.println("到家");
break;
case 3:System.out.println("到家");
break;
default:System.out.println("请确认回家的路线");
break;
}
}
/**
* 枚举
* @author wx
*
*/
public enum LineNum{
NUM1,NUM2,NUM3;
}
public void display2(){
LineNum num=LineNum.NUM1;
switch(num){
case NUM1:System.out.println("到家1");
break;
case NUM2:System.out.println("到家2");
break;
case NUM3:System.out.println("到家3");
break;
default:System.out.println("请确认回家的路线");
break;
}
LineNum[]nums=LineNum.values();
for(LineNum n:nums){
System.out.println(n);
}
}
}


3.Java集合框架

定义:在Java中能够动态的存放多个对象的类就是集合类
Java中的集合类都位于java.util包中。
Collection接口中定义了N个用来存取对象的方法,Collection常用的子接口有Set接口和List接口.
Set接口特点:
1)Set接口中存放的元素(对象)是无序的而且不能重复。
List接口特点:
List接口中存放的元素(对象)是有序而且能重复。
Set,List接口的父接口是Collection
Map接口和Collection不存在继承关系。

特点:
Map接口是以键值对的形式存放数据的。

key=value.

4.Set接口

Set接口存、取、删对象都有很高的效率。
实现类:
HashSet
LinkedHashSet
TreeSet

Set接口存取对象的原理:
实现Set接口的集合存对象时:
根据每个对象的哈希码值(调用hashCode()获得)用固定的算法算出它的存储索引,把对象存放在一个叫散列表的相应位置(表元)中:
如果对应的位置没有其它元素,就只需要直接存入。
如果该位置有元素了,会将新对象跟该位置的所有对象进行比较(调用equals()),以查看是否已经存在了:还不存在就存放,已经存在就直接使用。

取对象时:
根据对象的哈希码值计算出它的存储索引,在散列表的相应位置(表元)上的元素间进行少量的比较操作就可以找出它。

HashSet特点:
HashSet根据元素的哈希码进行存放,取出时也可以根据哈希码快速找到。

LinkedHashSet特点:
LinkedHashSet是HashSet的子类。
LinkedHashSet在保存数据时还采用了链表记录元素加入的顺序,所以在使用LinkedHashSet时,输出的数据是有一定顺序的。
LinkedHashSet对于插入,修改,删除效率比较好。

自定义类需要重写hashCode和equals方法才能在Set集合中,实现相等规则的判断。

如果两个对象相同,他们的hashCode值一定相同,但是两个对象的HashCode值相同,这两个对象不一定是两个相同的对象。

例1:

import java.util.HashSet;
import java.util.Iterator;
/**
 * @author wx
 * HashSet 类示例
 */
public class HashSetTest1 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
HashSet hs=new HashSet();
hs.add("zhangsan");
hs.add(100);
hs.add(100);
hs.add(true);
hs.add("lisi");
hs.add(20.34);
System.out.println("元素个数:"+hs.size());
System.out.println("是否为空:"+hs.isEmpty());
System.out.println("包含指定元素:"+hs.contains(100));
HashSet hs2=new HashSet();
hs2.addAll(hs);
System.out.println("集合之间是否包含另一个集合"+hs2.containsAll(hs));
//hs2.remove(100);
//hs2.removeAll(hs);
hs2.clear();
System.out.println(hs2.size());

//获取迭代器对象
Iterator it=hs.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}

例2:
import java.util.HashSet;
import java.util.Iterator;
import com.model.User;
/**
 * @author wx
 *
 */
public class HashSetTest2 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
HashSet hs=new HashSet();
User user1=new User();
user1.setId(1001);
user1.setName("zhangsan");

User user2=new User();
user2.setId(1002);
user2.setName("lisi");

User user3=new User();
user3.setId(1001);
user3.setName("zhangsan");

hs.add(user1);
hs.add(user2);
hs.add(user3);

Iterator it=hs.iterator();
while(it.hasNext()){
User user=(User)it.next();
System.out.println(user.getId()+user.getName());
}
}
}

例3:

import java.util.Iterator;
import java.util.LinkedHashSet;
/**
 * @author wx
 * LinkedHashSet 类示例
 */
public class LinkedHashSetTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
LinkedHashSet lhs=new LinkedHashSet();
lhs.add("zhangsan");
lhs.add(100);
lhs.add(false);

Iterator it=lhs.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值