首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

初学java-会合

2012-12-22 
初学java--集合?虽然说是复习关于集合的有关知识,但发现以前学的几乎都忘了。。。??java中的集合框架都实现了

初学java--集合

?虽然说是复习关于集合的有关知识,但发现以前学的几乎都忘了初学java-会合。。。?
?java中的集合框架都实现了collection接口,因此set、list、map三大主要运用的集合都能实现向集合添加元素、移除元素、得到集合的大小、把集合转化为数组等方法。
1.List :List集合框架与数组最为接近,List里面的元素是有序的而且list可以存储相同的元素。元素是有序的也就是说我们可以根据元素的索引得值到元素,根据索引值对元素进行添加删除等操作。
常用来实现List接口的子类有:
?? java.util.ArrayList,
?? java.util.LinkedList
?? java.util.Vector

2.Set:Set集合框架里面的元素是无序的而且不能存储相同的元素。形象的说Set集合框架就是一个黑色的袋子,我们可以往里面放一个一个不同的东西,但却不知道放在了袋子的什么位置,因而Set集合框架的元素没有索引值,想要把里面的元素取出来就需要一个迭代器进行迭代。
常用来实现Set接口的子类有:
?? java.util.HashSet
?? java.util.TreeSet
?? java.util.Iterator

?

3.Map:Map集合框架存储的是键值对(key----value映射),如果我们把键值当做索引值,那么Map就可以看做一种数组。键值对的形象的解释就是现实中身份证与人的关系,也就是说key是唯一的,而value是可以重复的,这就好比一个数组,每个元素的索引值是唯一的一样。
常用来实现Map接口的子类有:
??? java.util.HashMap
??? java.util.Hashtable

简单的总结一下三种集合框架的特点:
List集合是有序有重复的,Set集合是无序唯一的,Map集合是一一对应的!

在用集合之前想想要保存的数据的特点,是否有序,是否有重复的等等然后再选择最好的来运用!

集合运用之除重排序:

package cn.tan.lesson8;import java.util.HashSet;import java.util.Iterator;import java.util.Random;/** * set集合完成除重排序 *  * @author 谭万辉 *  */public class setTest {// 程序入口public static void main(String[] args) {HashSet<Student> hs = createHashSet();System.out.println("排序前的集合为:");print(hs);System.out.println("排序前的集合的元素个数为:" + hs.size());paixu(hs);}private static void paixu(HashSet<Student> hs) {// 得到数组Object[] integer = hs.toArray();for (int i = 0; i < integer.length; i++) {for (int j = i + 1; j < integer.length; j++) {Student stu1 = (Student) integer[i];Student stu2 = (Student) integer[j];if (stu1.getAge() == stu2.getAge()|| stu1.getName() == stu2.getName()) {hs.remove(stu1);}}}integer = hs.toArray();// 循环排序for (int i = 0; i < integer.length; i++) {for (int j = i + 1; j < integer.length; j++) {Student stu1 = (Student) integer[i];Student stu2 = (Student) integer[j];if (stu1.getAge() > stu2.getAge()) {Student temp = (Student) integer[i];integer[i] = integer[j];integer[j] = temp;}}}// 打印数组for (int i = 0; i < integer.length; i++) {Student stu = (Student) integer[i];System.out.println("姓名:" + stu.getName() + "   年龄:" + stu.getAge());}System.out.println("排序后的总数为:" + integer.length);}// 新建一个HashSet集合private static HashSet<Student> createHashSet() {// 创建一个HashSet对象HashSet<Student> hash = new HashSet<Student>();// 使用循环往集合中添加数据for (int i = 0; i < 10; i++) {java.util.Random rd = new java.util.Random();java.util.Random rd1 = new java.util.Random();int value = rd.nextInt(30);int value1 = rd1.nextInt(30);Student stu = new Student("学生" + value1, value);hash.add(stu);}return hash;}// 打印的方法private static void print(HashSet<Student> hs) {// 得到Set集合的迭代器Iterator<Student> iterator = hs.iterator();while (iterator.hasNext()) {Student st = iterator.next();System.out.println(st.getName() + " " + st.getAge());}}}

?输出结果为:排序前的集合为:
学生3 20
学生4 28
学生15 27
学生20 14
学生17 4
学生29 16
学生3 27
学生1 22
学生29 6
学生14 14
排序前的集合的元素个数为:10
姓名:学生17?? 年龄:4
姓名:学生29?? 年龄:6
姓名:学生14?? 年龄:14
姓名:学生29?? 年龄:16
姓名:学生3?? 年龄:20
姓名:学生1?? 年龄:22
姓名:学生3?? 年龄:27
姓名:学生4?? 年龄:28
排序后的总数为:8


4.==与equals的区别和联系(初探):
刚开始用的时候发现这两个东西似乎没有区别,其实它们的区别还是有的。==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。

==比较的是两个对象的地址,而equals比较的是两个对象的内容。
显然,当equals为true时,==不一定为true:

package cn.tan.lesson9;/* * 测试==和equals的区别 */public class StringTest {     public static void main(String[] args) {         String s1 = "Monday";         String s2 = new String("Monday");       //  s2 = s2.intern();         if (s1 == s2)             System.out.println("s1 == s2");         else             System.out.println("s1 != s2");         if (s1.equals(s2))             System.out.println("s1 equals s2");         else             System.out.println("s1 not equals s2");     }}

?

输出结果为:

s1 != s2
s1 equals s2

当使用 s2 = "Monday" 这样的表达是创建字符串的时候,程序首先会
在这个String缓冲池中寻找相同值的对象,在第一个程序中,s1先被
放到了池中,所以在s2被创建的时候,程序找到了具有相同值的 s1
将 s2 引用 s1 所引用的对象"Monday"
第二段程序中,使用了 new 操作符,他明白的告诉程序:
"我要一个新的!不要旧的!"于是一个新的"Monday"Sting对象被创
建在内存中。他们的值相同,但是位置不同,因此==操作判断为false。

?

热点排行