【java开发系列】—— 集合使用方法

前言

  在java中提供给我们了一些类似C++泛型的简单集合,list,set,map等。这里,简单介绍一下这些集合容器的使用方法,以及复杂对象元素的自定义排序。

  首先看一下集合的框架图:

  由于collection也继承了Iterator和comparable接口,因此我们可以使用Iterator来遍历元素,也可以通过自定义compareTo函数来重新编写自己的排序。

  List

 1 package testCollection;
 2
 3 import java.util.ArrayList;
 4 import java.util.Iterator;
 5 import java.util.List;
 6
 7 public class testList {
 8     public static void main(String[] args){
 9         List list = new ArrayList();
10         list.add("test1");
11         list.add("test2");
12         list.add("test3");
13
14         System.out.println("out by for!");
15         for(Object o : list){
16             System.out.println(o);
17         }
18
19         System.out.println("out by iterator!");
20         Iterator iterator = list.iterator();
21         while(iterator.hasNext()){
22             String element = (String)iterator.next();
23             System.out.println(element);
24         }
25     }
26 }

运行结果

out by for!
test1
test2
test3
out by iterator!
test1
test2
test3

Set,如果遇到重复的元素,不会添加

 1 package testCollection;
 2
 3 import java.util.HashSet;
 4 import java.util.Set;
 5
 6 public class testSet {
 7     public static void main(String[] args){
 8         Set set = new HashSet();//使用set一般都是用hashset,这个会快一些
 9         set.add("test1");
10         set.add("test2");
11         if(set.add("test2")){
12             System.out.println("add successful");
13         }else{
14             System.out.println("add failed");
15         }
16     }
17 }

运行结果

add failed

Map

 1 package testCollection;
 2
 3 import java.util.HashMap;
 4 import java.util.Map;
 5 import java.util.Set;
 6
 7 public class testMap {
 8     public static void main(String[] args){
 9         Map map = new HashMap();
10
11         map.put(1, "test1");
12         map.put(2, "test2");
13
14         System.out.println("size "+map.size());
15         System.out.println(map.get(1));
16
17         Set keys = map.keySet();
18         for(Object key : keys){
19             System.out.println(key);
20         }
21
22         map.remove(2);
23         System.out.println("size "+map.size());
24     }
25 }

运行结果

size 2
test1
1
2
size 1

自定义排序函数

person类,继承Comparable接口,重载compareTo函数

 1 package testCollection;
 2
 3 public class Person implements Comparable{
 4     private String name;
 5     private int age;
 6     public String getName() {
 7         return name;
 8     }
 9     public void setName(String name) {
10         this.name = name;
11     }
12     public int getAge() {
13         return age;
14     }
15     public void setAge(int age) {
16         this.age = age;
17     }
18     public Person(String name,int age){
19         this.name = name;
20         this.age = age;
21     }
22     @Override
23     public int compareTo(Object person) throws ClassCastException {
24         if(!(person instanceof Person)){
25             throw new ClassCastException("A Person perspected!");
26         }
27         int age = ((Person)person).getAge();
28         return this.age-age;
29     }
30 }

测试类

 1 package testCollection;
 2
 3 import java.util.Arrays;
 4
 5 public class testComparable {
 6     public static void main(String[] args){
 7         Person[] persons = new Person[4];
 8         persons[0] = new Person("test1",18);
 9         persons[1] = new Person("test2",20);
10         persons[2] = new Person("test3",15);
11         persons[3] = new Person("test4",19);
12
13         System.out.println("before sorting!");
14
15         for(Person p : persons){
16             System.out.println("name: "+p.getName()+" age: "+p.getAge());
17         }
18
19         System.out.println("after sorting!");
20         Arrays.sort(persons);
21         for(Person p : persons){
22             System.out.println("name: "+p.getName()+" age: "+p.getAge());
23         }
24     }
25 }

运行结果

before sorting!
name: test1 age: 18
name: test2 age: 20
name: test3 age: 15
name: test4 age: 19
after sorting!
name: test3 age: 15
name: test1 age: 18
name: test4 age: 19
name: test2 age: 20
时间: 2024-12-06 23:39:26

【java开发系列】—— 集合使用方法的相关文章

黑马程序员——java基础 ArrayList集合基本方法演示

java基础 ArrayList集合基本方法演示 import java.util.ArrayList; import java.util.Iterator; public class ArrayListDemos { public static void main(String[] args) { // 创建一个新的容器 ArrayList al = new ArrayList(); al.add("abc1"); al.add("abc2"); al.add(&

【java开发系列】—— 自定义注解(转)

之前在开发中,就总纳闷,为什么继承接口时,会出现@Override注解,有时候还会提示写注解@SuppressWarnings? 原来这是java特有的特性,注解! 那么什么是注解呢? 注解就是某种注解类型的一个实例,我们可以用它在某个类上进行标注,这样编译器在编译我们的文件时,会根据我们自己设定的方法来编译类. 注解都是什么呢?看下面这张图就明白了! 上面的图可以看出,注解大体上分为三种:标记注解,一般注解,元注解 这里面Override这个没测试出来,因为目前的Eclipse会自动帮我们排错

【java开发系列】—— 自定义注解

之前在开发中,就总纳闷,为什么继承接口时,会出现@Override注解,有时候还会提示写注解@SuppressWarnings? 原来这是java特有的特性,注解! 那么什么是注解呢? 注解就是某种注解类型的一个实例,我们可以用它在某个类上进行标注,这样编译器在编译我们的文件时,会根据我们自己设定的方法来编译类. 注解都是什么呢?看下面这张图就明白了! 上面的图可以看出,注解大体上分为三种:标记注解,一般注解,元注解 这里面Override这个没测试出来,因为目前的Eclipse会自动帮我们排错

【java开发系列】—— JDK安装

前言 作为一个java开发者,安装JDK是不可避免的,但是配置路径却总是记不住,百度也有很多参考例子.这里仅仅当做以后参考的笔记记录. 说到JDK,就不得不提JRE.他们到底是什么呢? 通常我们进行java开发,是要使用JDK的,它是专门给开发人员使用的API工具包,编译器,JRE等等.而JRE是java相关的应用程序运行时所需要的环境,所以相对于JDK来说,提供的东西要少一些. 比如,我们进行开发时,要去JDK的路径下寻找相应的jar包或者lib使用它其中的函数.而我们使用的eclipse本身

【java开发系列】—— JAVA面试题(1)

今天参加笔试,里面有设计模式,和一些基础题! 印象最深的是:什么不是Object的函数,我蒙的finalize,哎,无知! 还问了,接口与抽象类的不同,还有多线程的实现方式!下面基本都有. 另外还问了,观察者模式,设计模式,我一点不会,看来要下功夫了! 1.  面向对象编程的三大特性是什么,请简要阐述 (1).继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继 承了原始类的特性,新类称为原始类

java基础系列--集合类库(一)

原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/7229478.html 1.概述 Java的集合类库很是丰富,囊括了大部分的常见数据结构形式,让我们可以有目的性的选择适合当前业务场景和功能场景的集合类.合适的集合框架可以最大程度的提升执行速度和效率. Java集合类库中所有的集合类都始于Collection接口和Map接口,前者表示单值集合,后者表示映射集合(双值集合). Java集合框架中的Abstract开头的抽象类,其实是JDK开

转载--编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议16~20)

阅读目录 建议16:易变业务使用脚本语言编写 建议17:慎用动态编译 建议18:避免instanceof非预期结果 建议19:断言绝对不是鸡肋 建议20:不要只替换一个类 回到顶部 建议16:易变业务使用脚本语言编写 Java世界一直在遭受着异种语言的入侵,比如PHP,Ruby,Groovy.Javascript等,这些入侵者都有一个共同特征:全是同一类语言-----脚本语言,它们都是在运行期解释执行的.为什么Java这种强编译型语言会需要这些脚本语言呢?那是因为脚本语言的三大特征,如下所示:

转载-------编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议1~5)

阅读目录 建议1:不要在常量和变量中出现易混淆的字母 建议2:莫让常量蜕变成变量 建议3:三元操作符的类型务必一致 建议4:避免带有变长参数的方法重载 建议5:别让null值和空值威胁到变长方法              The reasonable man adapts himself to the world; The unreasonable one persists in trying to adapt the world himself. 明白事理的人使自己适应世界:不明事理的人想让世

阿里巴巴Java开发手册-集合处理

1. [强制]关于 hashCode 和 equals 的处理,遵循如下规则: 1) 只要重写 equals ,就必须重写 hashCode . 2) 因为 Set 存储的是不重复的对象,依据 hashCode 和 equals 进行判断,所以 Set 存储的对象必须重写这两个方法. 3) 如果自定义对象做为 Map 的键,那么必须重写 hashCode 和 equals . 说明: String 重写了 hashCode 和 equals 方法,所以我们可以非常愉快地使用 String 对象作