六、java.util篇
Q6.1 java能动态分配数组吗? 答:可以。例如int n = 3; Language[] myLanguages = new Language[n];
Q6.2 我怎么知道数组的长度? 答:用length属性。如上例中的 myLanguages.length 就为 3。
Q6.3 我还想让数组的长度能自动改变,能够增加/删除元素。 答:用顺序表--java.util.List接口。 你可以选择用ArrayList或是LinkedList,前者是数组实现,后者是链表实现。 例如: List list = new ArrayList(); 或是 List list = new LinkedList(); 。
Q6.4 什么是链表?为什么要有ArrayList和LinkedList两种List? 答:请补习数据结构。
Q6.5 我想用队列/栈。 答:用java.util.LinkedList。
Q6.6 我希望不要有重复的元素。 答:用集合--java.util.Set接口。例如:Set set = new HashSet()。
Q6.7 我想遍历集合/Map。 答:用java.util.Iterator。参见API。
Q6.8 我还要能够排序。 答:用java.util.TreeSet。例如:Set set = new TreeSet()。放进去的元素会自动排序 。 你需要为元素实现Comparable接口,还可能需要提供equals()方法,compareTo()方法,hashCode()方法。
Q6.9 但是我想给数组排序。 答:java.util.Arrays类包含了sort等实用方法。
Q6.10 我想按不同方式排序。 答:为每种方式定义一个实现了接口Comparator的排序类并和Arrays或TreeSet综合运用。
Q6.11 Map有什么用? 答:存储key-value的关键字-值对,你可以通过关键字来快速存取相应的值。
Q6.12 set方法没问题,但是get方法返回的是Object。 答:强制类型转换成你需要的类型。参见Q5.12。
Q6.13 ArrayList和Vector有什么不同?HashMap和Hashtable有什么不同? 答:ArrayList和HashMap是多线程不安全的,在多个线程中访问同一个ArrayList对象可能会引起冲突并导致错误。而Vector和Hashtable是多线程安全的,即使在多个线程中同时访问同一个Vector对象也不会引起差错。看起来我们更应该使用Vector和Hashtable,但是实际上Vector和Hashtable的性能太差,所以如果你不在多线程中使用的话,还是应该用ArrayList和HashMap。
Q6.14 我要获得一个随机数。 答:使用java.util.Random类。
Q6.15 我比较两个String总是false,但是它们明明都是"abc" ! 答:比较String一定要使用equals或equalsIgnoreCase方法,不要使用 == !==比较的是两个引用(变量)是否指向了同一个对象,而不是比较其内容。
Q6.16 我想修改一个String但是在String类中没找到编辑方法。 答:使用StringBuffer类。 String str = "......."; //待处理的字符串StringBuffer buffer = new StringBuffer(str); //使用该字符串初始化一个StringBuffer buffer.append("..."); //调用StringBuffer的相关API来编辑字符串 String str2 = buffer.toString(); //获得编辑后的字符串。 另外,如果你需要将多个字符串连接起来,请尽量避免使用+号直接连接,而是使用StringBuffer.append()方法。
Q6.17 我想处理日期/时间。 答:使用java.util.Date类。你可以使用java.text.SimpleDateFormat类来在String和 Da te间互相转换。 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //规定日期格式 Date date = formatter.parse("2003-07-26 18:30:35"); //将符合格式的String转换为DateString s = formatter.format(date); //将Date转换为符合格式的String
|