- 浏览: 728597 次
- 性别:
- 来自: 上海
-
最新评论
-
TheUniqueGirl:
Tomcat系统架构与设计模式:http://www.doci ...
Tomcat -
aykjy:
...
UML常见工具之NetBeans(downmoon) -
不老肖邦:
谢谢提供的简单示例
JAVA toString()
Set ,List ,Map的区别和功能到底是怎样的?其实它是与数组区分开来的。
数组:java数组的长度是固定的,在同一个数组中只能存放相同类型的数据,可以是基本数据类型,也可
以存放引用类型的数据。
java集合:存入于java.util包中,它不能存放基本类型数据,而只能存放对象的引用。
Set (集):集合中的对象不按特定方式排序,并且没有重复对象。它的有些实现类能对集合中的对象按
特定方式排序。与数学中的集合最接近,两者都不包含重复元素。
List(列表):集合中的对象按照索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检
索对象。List与数组有些相似。
Map(映射):集合中的第一个元素包含一对键对象和值对象,集合中没有重复的键对象,值可以重复。
它的有些实现类能对集合中的键对象进行排序。切记在用到MAP时一定需要传入两个参数
键和值。
例:
import java.util.*;
public static void print(Collection<? extends Object> c){
Iterator<? extends Object> it = c.iterator();
//遍历集合中的所有元素
while(it.hasNext()){
Object element = it.next();
System.out.println(element);
}
}
public static void main(String args[]){
Set<String> set = new HashSet<String>();//<String>指定集合中元素的类型。
set.add("Tom");
set.add("Mary");
set.add("Jack");
print(set);
List<String> list = new ArrayList<String>();
list.add("Linda");
lis.add("Mary");
list.add("Rose");
print(list);
Map<String,String> map = new HashMap<String,String>();//两个参数,键和值
map.put("M","男");
map.put("F","女");//与实现了Collection接口的set,list加入元素的方法不一样。
print(map.entrySet());//entrySet()返回SET视图
}
}
要知道两个异常:ConcurrentModificatiojException和ClassCastException
1、对一个集合不能够一边修改一边操作(除了用Iterator进行修改)不然将抛出ConcurrentModificatiojException异常。
2、当试图将对象强制转换为不是实例的时,抛出ClassCastException异常。
Set类
由上图中可知实现Set接口的两个类有HashSet(无序)和TreeSet(实现了SortedSet接口、有序)
1)TreeSet支持两种排序:自然排序(默认)和客户排序
自然排序:实现了Comparable接口,通过compareTo(Object o)方法比较。只能向TreeSet集合中加入同类
型的对象,并且这些对象要实现Comparable接口。
例1:
Set<Object> set = new TreeSet<Object>();
set.add(new Integer(8);
set.add(new String("9");//抛出ClassCastException异常
例2:
Test类没有实现了Comparable接口,带有一个 String 和 int 的成员变量。
Set<Object> set = new TreeSet<Object>();
set.add(new Test("A",5);
set.add(new Test("B",6);//抛出ClassCastException异常
这也是用TreeSet时要注意的地方
2)HashSet:按照哈希算法来存取集合中的对象,具有很好的查找性能。当向集合中加入一个对象时,HashSet会调用对象的hashCode()方法来获得哈希码,然后根据这个哈希码进一步计算出对象在集合中的存放位置。跟数据结构中的散列存储概念一样。
要明白一点的就是:当用户覆盖了object类的equals()方法,一定也要重写hashCode方法,而且TreetSet还要增加一个compareTo方法。
例:
import java.util.*;
public class Demo2 implements Comparable{
private String name;
private int age;
public Demo2(String a,int b){
name = a;
age = b;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int compareTo(Object o) {
Demo2 other = (Demo2)o;
//先按照name属性排序
if(this.name.compareTo(other.getName())>0){System.out.println("1");return 1;}
if(this.name.compareTo(other.getName())<0){System.out.println("2");return -1;}
//再按照age属性排序
if(this.age>other.getAge()){System.out.println("3");return 1;}
if(this.age<other.getAge()){System.out.println("4");return -1;}
return 0;
}
public boolean equals(Object o){
if(this==o)return true;
if(!(o instanceof Demo2))return false;
final Demo2 other = (Demo2)o;
if(this.name.equals(other.getName())&&this.age==other.getAge())
return true;
else
return false;
}
public int hashCode(){
int result;
result=(name==null?0:name.hashCode());
result=29*result+age;
return result;
}
public static void main(String agrs[]){
Set<Demo2> set = new TreeSet<Demo2>();
Demo2 a = new Demo2("Tom",15);
Demo2 b = new Demo2("Apple",16);
set.add(a);
set.add(b);
Iterator<Demo2> it = set.iterator();
while(it.hasNext()){
Demo2 Demo2 = it.next();
System.out.println(Demo2.getName()+" "+Demo2.getAge());
}
}
}
以上三个方法的重写必须理解。
List类:主要特征是其元素以线性方式存储,集合中允许存放重复对象。
ArrayList可以说是线性表,LinkedList可以说是链表。并不是自动排序的而是要通过Collection接口中sort()方法
例:
import java.util.*;
public class Demo1{
public static void insert(List<Integer> list,int data){
ListIterator<Integer> it =list.listIterator();
while(it.hasNext()){
Integer in = it.next();
if(data<=in.intValue()){
it.previous();
it.add(new Integer(data));
break;
}
}
}
public static void main(String[] args) {
List<Integer> list = new LinkedList<Integer>();
list.add(new Integer(3));
list.add(new Integer(2));
list.add(new Integer(5));
list.add(new Integer(9));
Collections.sort(list);
insert(list,6);
System.out.println(Arrays.toString(list.toArray()));//toArray()返回一数组,Arrays.toString()输出数组。
int a[] = new int[]{1,2,3};
System.out.print(Arrays.toString(a));
}
}
Map类:对容量,初始容量,大小,负载因子要知道这些知识点。
Map map = new HashMap();
for(int i=0; i<args.length; i++) {
map.put(new Integer(i), args[i]);
}
System.out.println("HashMap的容量:" + map.size());
System.out.println(map);
数组:java数组的长度是固定的,在同一个数组中只能存放相同类型的数据,可以是基本数据类型,也可
以存放引用类型的数据。
java集合:存入于java.util包中,它不能存放基本类型数据,而只能存放对象的引用。
Set (集):集合中的对象不按特定方式排序,并且没有重复对象。它的有些实现类能对集合中的对象按
特定方式排序。与数学中的集合最接近,两者都不包含重复元素。
List(列表):集合中的对象按照索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检
索对象。List与数组有些相似。
Map(映射):集合中的第一个元素包含一对键对象和值对象,集合中没有重复的键对象,值可以重复。
它的有些实现类能对集合中的键对象进行排序。切记在用到MAP时一定需要传入两个参数
键和值。
例:
import java.util.*;
public static void print(Collection<? extends Object> c){
Iterator<? extends Object> it = c.iterator();
//遍历集合中的所有元素
while(it.hasNext()){
Object element = it.next();
System.out.println(element);
}
}
public static void main(String args[]){
Set<String> set = new HashSet<String>();//<String>指定集合中元素的类型。
set.add("Tom");
set.add("Mary");
set.add("Jack");
print(set);
List<String> list = new ArrayList<String>();
list.add("Linda");
lis.add("Mary");
list.add("Rose");
print(list);
Map<String,String> map = new HashMap<String,String>();//两个参数,键和值
map.put("M","男");
map.put("F","女");//与实现了Collection接口的set,list加入元素的方法不一样。
print(map.entrySet());//entrySet()返回SET视图
}
}
要知道两个异常:ConcurrentModificatiojException和ClassCastException
1、对一个集合不能够一边修改一边操作(除了用Iterator进行修改)不然将抛出ConcurrentModificatiojException异常。
2、当试图将对象强制转换为不是实例的时,抛出ClassCastException异常。
Set类
由上图中可知实现Set接口的两个类有HashSet(无序)和TreeSet(实现了SortedSet接口、有序)
1)TreeSet支持两种排序:自然排序(默认)和客户排序
自然排序:实现了Comparable接口,通过compareTo(Object o)方法比较。只能向TreeSet集合中加入同类
型的对象,并且这些对象要实现Comparable接口。
例1:
Set<Object> set = new TreeSet<Object>();
set.add(new Integer(8);
set.add(new String("9");//抛出ClassCastException异常
例2:
Test类没有实现了Comparable接口,带有一个 String 和 int 的成员变量。
Set<Object> set = new TreeSet<Object>();
set.add(new Test("A",5);
set.add(new Test("B",6);//抛出ClassCastException异常
这也是用TreeSet时要注意的地方
2)HashSet:按照哈希算法来存取集合中的对象,具有很好的查找性能。当向集合中加入一个对象时,HashSet会调用对象的hashCode()方法来获得哈希码,然后根据这个哈希码进一步计算出对象在集合中的存放位置。跟数据结构中的散列存储概念一样。
要明白一点的就是:当用户覆盖了object类的equals()方法,一定也要重写hashCode方法,而且TreetSet还要增加一个compareTo方法。
例:
import java.util.*;
public class Demo2 implements Comparable{
private String name;
private int age;
public Demo2(String a,int b){
name = a;
age = b;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int compareTo(Object o) {
Demo2 other = (Demo2)o;
//先按照name属性排序
if(this.name.compareTo(other.getName())>0){System.out.println("1");return 1;}
if(this.name.compareTo(other.getName())<0){System.out.println("2");return -1;}
//再按照age属性排序
if(this.age>other.getAge()){System.out.println("3");return 1;}
if(this.age<other.getAge()){System.out.println("4");return -1;}
return 0;
}
public boolean equals(Object o){
if(this==o)return true;
if(!(o instanceof Demo2))return false;
final Demo2 other = (Demo2)o;
if(this.name.equals(other.getName())&&this.age==other.getAge())
return true;
else
return false;
}
public int hashCode(){
int result;
result=(name==null?0:name.hashCode());
result=29*result+age;
return result;
}
public static void main(String agrs[]){
Set<Demo2> set = new TreeSet<Demo2>();
Demo2 a = new Demo2("Tom",15);
Demo2 b = new Demo2("Apple",16);
set.add(a);
set.add(b);
Iterator<Demo2> it = set.iterator();
while(it.hasNext()){
Demo2 Demo2 = it.next();
System.out.println(Demo2.getName()+" "+Demo2.getAge());
}
}
}
以上三个方法的重写必须理解。
List类:主要特征是其元素以线性方式存储,集合中允许存放重复对象。
ArrayList可以说是线性表,LinkedList可以说是链表。并不是自动排序的而是要通过Collection接口中sort()方法
例:
import java.util.*;
public class Demo1{
public static void insert(List<Integer> list,int data){
ListIterator<Integer> it =list.listIterator();
while(it.hasNext()){
Integer in = it.next();
if(data<=in.intValue()){
it.previous();
it.add(new Integer(data));
break;
}
}
}
public static void main(String[] args) {
List<Integer> list = new LinkedList<Integer>();
list.add(new Integer(3));
list.add(new Integer(2));
list.add(new Integer(5));
list.add(new Integer(9));
Collections.sort(list);
insert(list,6);
System.out.println(Arrays.toString(list.toArray()));//toArray()返回一数组,Arrays.toString()输出数组。
int a[] = new int[]{1,2,3};
System.out.print(Arrays.toString(a));
}
}
Map类:对容量,初始容量,大小,负载因子要知道这些知识点。
Map map = new HashMap();
for(int i=0; i<args.length; i++) {
map.put(new Integer(i), args[i]);
}
System.out.println("HashMap的容量:" + map.size());
System.out.println(map);
发表评论
-
Myeclipse的tyry catch 怎么让它自动生成
2011-03-21 19:58 1654方法1:选择代码段,右键单击,选择Surround Wit ... -
深入Struts2
2011-02-24 21:24 8211.深入Struts2的配置文件 本部分主要介绍struts ... -
Struts教程
2011-02-24 22:11 1006概述 本文主要讲解什么是Struts Frame ... -
Action接收参数的3种方式(属性,域模型,模型驱动,struts2.1.8)
2011-02-24 22:32 1684常用第一种跟第二种 1.Action属性传参数: ... -
struts2采用域模型方式接收参数
2011-02-24 22:38 1029struts.xml: <struts&g ... -
Hibernate学习笔记(一)--用MyEclipse 6.5+MySQL 5.0的环境跑起来
2011-02-25 14:10 1297准备:建表 用MySQL在名为STMS数据库 ... -
在MyEclipse下如何添加hibernate支持(2)
2011-02-25 14:26 1173在上一篇文章里我们已经成功的为项目添加了hib ... -
在MyEclipse下如何添加hibernate支持(1)
2011-02-25 14:26 1677在网络资源中有很多S2HS整合的文档和教程,但是真正适 ... -
Struts2+Spring+Hibernate搭建全解!
2011-02-26 20:46 782Struts2+Spring+Hibernate是J2 ... -
struts2拦截器详解实例
2011-03-21 16:11 1088struts.xml <?xml version=&qu ... -
Struts2拦截器配置
2011-03-21 11:25 1407拦截器(interceptor)是Struts2最强大的特性之 ... -
Struts2使用之拦截器实例
2011-03-21 11:16 955实例一:防止表单重复提交 防止重复提交:有两种方法:一是使用 ... -
Struts2拦截器配置
2011-03-21 11:11 1310Struts2框架的大部分功能都是通过拦截器来完成的。默认情况 ... -
struts开发小结
2011-03-20 21:27 901<%@ page language="java ... -
数据校验DataValiation
2011-03-20 14:46 919struts.xml <?xml version=&qu ... -
JAVA Calendar详解
2011-03-20 14:00 826(在文章的最后,将会介绍Date类,如果有兴趣,可以直接翻到最 ... -
struts tags小结
2011-03-20 10:47 1612struts.xml <?xml version=&q ... -
ongl表达式用法
2011-03-19 21:39 1197struts.xml <?xml version=&qu ... -
action向其他页面传参数
2011-03-19 16:24 1430struts.xml <?xml version=&qu ... -
动态结果集DynamicResult
2011-03-19 16:04 932struts.xml <?xml version=&qu ...
相关推荐
java集合类list-set-map.doc
Java集合Collection、List、Set、Map使用详解
// java中对象容器主要有Set,List和Map三个接口类。 // 迭代器(Iterator)模式,又叫做游标(Cursor)模式。 // GOF给出的定义为:提供一种方法访问一个容器(container)对象中的各个元素, // 而又不需暴露该...
Java 集合类 List-Set-Map 的区别和联系 Java 集合类 List、Set 和 Map 是 Java 语言中最基本的集合类,它们之间存在着紧密的联系和区别。在本文中,我们将对 Java 集合类 List、Set 和 Map 的区别和联系进行详细的...
在Java编程语言中,集合框架提供了多种数据结构来存储和操作数据,其中最常用的是`Set`、`Map`和`List`。这三种集合类型各自具有独特的特性和用途,理解它们之间的区别与联系对于有效地使用Java进行数据管理至关重要...
集合类可以分为三大类:Collection、List 和 Set。 Collection 是集合框架中的根接口,提供了基本的集合操作,如 add、remove、contains 等。Collection 接口没有实现类,因此需要通过其子接口来实现。 Set 是一个...
"Java集合Collection、List、Set、Map使用详解" Java集合是Java编程语言中最基本也是最重要的一部分。能够正确地使用集合类和理解集合的实现原理对于Java程序的开发具有无比的好处。本文将详细解释Java集合的实现...
### JAVA集合(List, Set, Map)详解 #### 集合框架概述 Java集合框架是Java编程语言中处理数据组织的核心部分。它提供了一系列接口、抽象类和具体实现类,帮助开发者有效地管理对象集合。本篇文章将深入探讨集合框架...
详细描述map、list、set的常用子类特性,各个场景的适用。
本文深入探讨了 Java 集合框架中的 List、Set 和 Map 三种集合类型,包括它们的特点、实现以及使用示例。通过对比分析,明确了它们之间的区别和适用场景。希望本文能够帮助你在实际开发中更好地利用 Java 集合框架,...
本文将深入解析Java集合中的Collection、List、Set和Map,包括它们的使用方法、实现原理以及如何进行排序。 ### 集合框架概述 1.1.1 容器简介 容器是Java集合框架的基础,它是一个可以存储多个对象的容器,提供了...
本文将深入探讨Java集合框架中的四个主要接口:Collection、List、Set和Map,以及它们的实现原理。 ### 集合框架概述 集合框架是Java API中用于存储和管理对象的统一框架。它为数据结构提供了抽象接口,使得程序员...
Java 集合框架的主要组件包括 Collection、List、Set、Map 等。 1.1 容器简介 容器是指可以存储对象的对象。 Java 集合框架中有多种类型的容器,每种容器都有其特点和用途。常见的容器有 Collection、List、Set、...
Java集合框架提供了多种接口和类,如Set、List和Map,它们各自有不同的特性和用途。本文将详细介绍如何遍历这些集合类型的实例。 首先,我们来看Set集合。Set接口代表不包含重复元素的集合,它的遍历方法主要有两种...
Java集合框架主要包括以下几种容器: - **Collection**:这是所有单列集合的根接口,包括List、Set等。 - **Set**:这是一个不允许重复元素的集合。 - **List**:这是一个有序的集合,允许重复元素,并且可以通过...
Java集合排序及java集合类详解(Collection、List、Map、Set)讲解 Java集合框架是Java语言中最重要的组件之一,能够正确使用Java集合框架对于Java程序的开发具有无比的好处。本文将详细解释Java集合框架的实现原理、...
Java集合框架主要包括Collection、List、Set、Map四个接口,它们分别实现了不同的数据结构。 Collection接口是Java集合框架的顶层接口,它定义了基本的集合操作,如add、remove、contains等。Collection接口有两个...
Java集合排序及java集合类详解(Collection、List、Map、Set).doc