- 浏览: 589713 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
zhanghao1785:
jQuery jqGrid中ColModel的参数大全 -
haiyangyiba:
在实际应用中,回车提交一般需要注意的是,多次回车之间的间隔,换 ...
回车自动提交 -
fengkuangxiao6:
快捷键能写的这么详细,太棒了!
Eclipse中10个最有用的快捷键组合 -
Frank_Sun:
我的jdk版本是1.6.0.29,在finally中加retu ...
try catch finally与return的执行顺序 -
jueyue:
这个注解可以搞吗,感觉还不如放在前台
struts2校验(二):声明式验证(基于xml配置验证)(1)
集合简介:集合是一个类,集合大致可分为3中体系set(无序,不可重复的集合)、List(有序,重复的集合)、map(映射关系的集合)、Java5后加入Queue(队列集合)。集合中保存的数据是对象(其实平常所以的对象多指对象的引用)。
·集合概念:
集合跟数组类似。区别是数组元素可存储基本类型和对象类型,而集合中存储的值只能是对象(其实都是对象的引用变量),数组中存储的数据长度不可变,但集合中存储的对象数据多少可以随时添加与删除。
·集合中放置的都是Object类型,因此取出来的值也都是Object类型,所有最后取出来的值要强制转换成真正的类型(就是放进去是什么类型取出来还是什么类型)。
·MAP:map保存的是key --> value 对,map里的key不能重复。
·集合类位于java.util.* 下
Java集合:
常用集合类: List(ArrayList, LinkedList,vector),Set(HashSet,TreeSet)
Map(HashMap, TreeMap,hashtable)
·访问集合元素:
1、Set集合无序不重复,所以只能根据元素本身来访问到它。
2、List集合有序重复,所以可以根据元素的索引来访问到它。
3、Map 映射,根据key来访问值。
·Collection和Iterator接口
·通过上图可以看出,Collection是Set,queue和List的父接口。
Collection接口的方法:
boolean add(Object o) 向集合中加入一个对象的引用
void clear():删除集合中所有的对象,即不再持有这些对象的引用
boolean isEmpty()判断集合是否为空
boolean contains(Object o) 判断集合中是否持有特定对象的引用
Iterartor iterator()返回一个Iterator对象,可以用来遍历集合中的元素
boolean remove(Object o)从集合中删除一个对象的引用
int size() 返回集合中元素的数目
Object[] toArray() 返回一个数组,该数组中包括集合中的所有元素
关于:Iterator() 和toArray() 方法都用于集合的所有的元素,前者返回一个Iterator对象,后者返回一个包含集合中所有元素的数组。
·Iterator:为集合的迭代器,用来迭代集合的所有元素。所有集合都实现了Iterator接口的iterator方法。
·Iterator接口方法:
1、 boolean hasNext() :如果集合中还有下一个元素则返回true,用在for while循环的条件判断中。
2、 Object next() :返回集合中的下一个元素。
3、 void remove() :删除集合中上一次next()返回的元素。
·遍历集合:Iterator,while,增强for遍历集合。
例子:
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
public class IteratorTest
{
public static void main(String[] args)
{
Collection c = new HashSet();
c.add("a");
c.add("b");
c.add("c");
Iterator it = c.iterator();
//使用while语句与iterator
while(it.hasNext())
{
String sit = (String)it.next();
System.out.println(sit);
}
System.out.println("-----------------");
//使用for与iterator
for(Iterator itfor = c.iterator(); itfor.hasNext();)
{
String sitfor = (String)itfor.next();
System.out.println(sitfor);
}
System.out.println("--------------------");
//使用foreach语法
for(Object s : c)
{
String sfor = (String)s;
System.out.println(sfor);
}
}
}
·Set
·Set接口与 collection接口基本上完全一样,set没有提供任何额外方法,Set不允许包含重复元素。Set 常用的包含HashSet与TreeSet。HashSet底层是有HashMap实现的。
·HashSet:
特点:
1、无序。
2、不允许相同值添加到集合中。
存放的是对象的引用,没有重复对象
·存储原理:存入一个元素时调用该对象的hashCode()方法获得hashCode值,根据HashCode值决定该对象存储的位置,所以存储与读取该元素时会很快,一下就能定位到元素的位置.
·HashSet底层是使用HashMap实现的。当使用add方法将对象添加到Set集合中时,实际上是Map对象的key,而Map key对应的value我们没有用到。
·HashSet判断重复元素有两个条件:
使用equal判断两个对象是否为true并且两个对象的hashcode值相同,则判定为同一个对象就不能添加进集合,否则如果不能同时满足两个条件就能将元素添加进集合。
出现的情况:
1、hashCode值相同equal相同则为同一对象,不会存入集合。
2、hashCode值相同equal值false,可以存入集合。保存在相同位置,用链式结构保存多个对象。因为HashSet通过hashCode值定位元素位置,如果hashcode值相同那么会影响性能。
3、hashCode值不同equal值true,可以存入集合。存到了不同的位置。
4、hashCode值不同equal值false,可以存入集合。存到不同位置。实际当中,当元素的hashCode值相同时,equal值一定要保持为true。如果重新hashCode,那么一定要对应的重写equal。
·LinkedHashSet
LinkedHashSet存储位置也是由hashCode值来决定的,但是他使用链表来维护元素的次序,遍历LinkedHashSet时,HashSet会以存入的次序取出元素。
·TreeSet
·Set集合无序但是TreeSet是有序的,TreeSet使元素值处于排序状态(由小到大)。TreeSet实现SortedSet接口。
·Set元素不能重复TreeSet也一样,TreeSet判断是不是同一个元素:通过equals比较返回true,并且通过compareTo方法或compare比较返回0
·TreeSet比其他Set多了几个方法:
Comparatorcomparator() :返回对此 set 中的元素进行排序的比较器;如果此 set 使用其元素的自然顺序,则返回null
Object first() :返回Set中第一个元素(最小的)。
Object last() :返回Set中最大的一个元素。
Object lower(Object e) : 返回Set中小于e的元素。
Object higher(Object e) :返回Set中大于e的元素。
SortedSet subSet(fromElement,toElement) :返回Set中fromElement(包含本身)到toElement(不包含本身)的元素。
SortedSet headset(toElement) : 返回toElement前面的元素。
SortedSet tailSet(fromElement) : 返回fromElement后面的元素。
例子a:
import java.util.Set;
import java.util.TreeSet;
·TreeSet支持两种排序算法,自然排序和定制排序:
·自然排序:就是升序。
·Comparable接口中包含compareTo(Objectobj)方法,实现该接口类的对象就可以比较大小,比如:a.compareTo(b) 返回负数表示对象a小于对象b,返回0表示a与b相当,返回正数表示a大于b。一些常用类已经实现了该接口的该方法,如:Ingeger数字类,Dage日期类,String字符类,Charater类,Boolean类。
·Comparator接口包含compare(To1, T o2)方法也叫比较器,例如TreeSet类有一个构造器接受Comparator的比较器,比较器是自己定义的比较大小的规则,当compare方法返回负数时表示o1对象小于o2对象,返回0时表示o1与o2相等,返回正数时表示o1大于o2。compare用在自定义的类中需要自己定义排序规则如正序倒序等,比如自己创建一个类类中创建TreeSet集合,此时就能定义一个排序规则的类,然后将这个类的compare比较器传给TreeSet接受Comparator类型参数的构造器就好了,后面有一个例子。
自然排序列子:
上面例子a就是自然排序。因为Integer类实现了compareTo接口都是按照自然排序来的。
自定义排序:
反排序:
import java.util.*;
public class TreeSetTest3
{
public static void main(String[] args)
{
TreeSet s = new TreeSet(new MyComparator()); //因为集合是带泛型声明的,这里没有赋予泛型实参,所以默认就是Object类型的。
s.add("A"); //这里面的类型是Object的子类
s.add("C");
s.add("B");
for(Object si : s) //这里的si和s都是Object类型的,并不是String类型的
{
String sic = (String)si; //所以这里需要进行强制类型转换
System.out.println(sic); //这样才能输出正确的结果,不然会报错类型错误
}
}
}
class MyComparator implements Comparator //TreeSet构造器传入的Comparator类,实现compare方法
{
public int compare(Object a, Object b)
{
String a1 = (String)a;
String b1 = (String)b;
return b1.compareTo(a1); //这里是String类的Comparable接口的compareTo方法。这里b1比a1就是反排序,a1比b1就是自然排序了。
}
}
·如果用自定义的类型的数据的话,那么不能比较两个对象类型的大小,因为自定义类型没有实现compara方法,可以自行实现一个compara比较器后就能进行自定义排序了,否则没有比较器会报错的。
·集合概念:
集合跟数组类似。区别是数组元素可存储基本类型和对象类型,而集合中存储的值只能是对象(其实都是对象的引用变量),数组中存储的数据长度不可变,但集合中存储的对象数据多少可以随时添加与删除。
·集合中放置的都是Object类型,因此取出来的值也都是Object类型,所有最后取出来的值要强制转换成真正的类型(就是放进去是什么类型取出来还是什么类型)。
·MAP:map保存的是key --> value 对,map里的key不能重复。
·集合类位于java.util.* 下
Java集合:
常用集合类: List(ArrayList, LinkedList,vector),Set(HashSet,TreeSet)
Map(HashMap, TreeMap,hashtable)
·访问集合元素:
1、Set集合无序不重复,所以只能根据元素本身来访问到它。
2、List集合有序重复,所以可以根据元素的索引来访问到它。
3、Map 映射,根据key来访问值。
·Collection和Iterator接口
·通过上图可以看出,Collection是Set,queue和List的父接口。
Collection接口的方法:
boolean add(Object o) 向集合中加入一个对象的引用
void clear():删除集合中所有的对象,即不再持有这些对象的引用
boolean isEmpty()判断集合是否为空
boolean contains(Object o) 判断集合中是否持有特定对象的引用
Iterartor iterator()返回一个Iterator对象,可以用来遍历集合中的元素
boolean remove(Object o)从集合中删除一个对象的引用
int size() 返回集合中元素的数目
Object[] toArray() 返回一个数组,该数组中包括集合中的所有元素
关于:Iterator() 和toArray() 方法都用于集合的所有的元素,前者返回一个Iterator对象,后者返回一个包含集合中所有元素的数组。
·Iterator:为集合的迭代器,用来迭代集合的所有元素。所有集合都实现了Iterator接口的iterator方法。
·Iterator接口方法:
1、 boolean hasNext() :如果集合中还有下一个元素则返回true,用在for while循环的条件判断中。
2、 Object next() :返回集合中的下一个元素。
3、 void remove() :删除集合中上一次next()返回的元素。
·遍历集合:Iterator,while,增强for遍历集合。
例子:
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
public class IteratorTest
{
public static void main(String[] args)
{
Collection c = new HashSet();
c.add("a");
c.add("b");
c.add("c");
Iterator it = c.iterator();
//使用while语句与iterator
while(it.hasNext())
{
String sit = (String)it.next();
System.out.println(sit);
}
System.out.println("-----------------");
//使用for与iterator
for(Iterator itfor = c.iterator(); itfor.hasNext();)
{
String sitfor = (String)itfor.next();
System.out.println(sitfor);
}
System.out.println("--------------------");
//使用foreach语法
for(Object s : c)
{
String sfor = (String)s;
System.out.println(sfor);
}
}
}
·Set
·Set接口与 collection接口基本上完全一样,set没有提供任何额外方法,Set不允许包含重复元素。Set 常用的包含HashSet与TreeSet。HashSet底层是有HashMap实现的。
·HashSet:
特点:
1、无序。
2、不允许相同值添加到集合中。
存放的是对象的引用,没有重复对象
Set set=new HashSet(); String s1=new String("hello"); String s2=s1; String s3=new String("world"); set.add(s1); set.add(s2); set.add(s3); System.out.println(set.size());//打印集合中对象的数目 为 2。
·存储原理:存入一个元素时调用该对象的hashCode()方法获得hashCode值,根据HashCode值决定该对象存储的位置,所以存储与读取该元素时会很快,一下就能定位到元素的位置.
·HashSet底层是使用HashMap实现的。当使用add方法将对象添加到Set集合中时,实际上是Map对象的key,而Map key对应的value我们没有用到。
·HashSet判断重复元素有两个条件:
使用equal判断两个对象是否为true并且两个对象的hashcode值相同,则判定为同一个对象就不能添加进集合,否则如果不能同时满足两个条件就能将元素添加进集合。
出现的情况:
1、hashCode值相同equal相同则为同一对象,不会存入集合。
2、hashCode值相同equal值false,可以存入集合。保存在相同位置,用链式结构保存多个对象。因为HashSet通过hashCode值定位元素位置,如果hashcode值相同那么会影响性能。
3、hashCode值不同equal值true,可以存入集合。存到了不同的位置。
4、hashCode值不同equal值false,可以存入集合。存到不同位置。实际当中,当元素的hashCode值相同时,equal值一定要保持为true。如果重新hashCode,那么一定要对应的重写equal。
·LinkedHashSet
LinkedHashSet存储位置也是由hashCode值来决定的,但是他使用链表来维护元素的次序,遍历LinkedHashSet时,HashSet会以存入的次序取出元素。
·TreeSet
·Set集合无序但是TreeSet是有序的,TreeSet使元素值处于排序状态(由小到大)。TreeSet实现SortedSet接口。
·Set元素不能重复TreeSet也一样,TreeSet判断是不是同一个元素:通过equals比较返回true,并且通过compareTo方法或compare比较返回0
·TreeSet比其他Set多了几个方法:
Comparatorcomparator() :返回对此 set 中的元素进行排序的比较器;如果此 set 使用其元素的自然顺序,则返回null
Object first() :返回Set中第一个元素(最小的)。
Object last() :返回Set中最大的一个元素。
Object lower(Object e) : 返回Set中小于e的元素。
Object higher(Object e) :返回Set中大于e的元素。
SortedSet subSet(fromElement,toElement) :返回Set中fromElement(包含本身)到toElement(不包含本身)的元素。
SortedSet headset(toElement) : 返回toElement前面的元素。
SortedSet tailSet(fromElement) : 返回fromElement后面的元素。
例子a:
import java.util.Set;
import java.util.TreeSet;
public class TreeSetTest { public static void main(String[] args) { TreeSet ts = new TreeSet(); ts.add(-1); ts.add(-3); ts.add(12); ts.add(1); System.out.println(ts); // 打印结果 [-3, -1, 1, 12] System.out.println(ts.first()); // -3 System.out.println(ts.last()); // 12 System.out.println(ts.subSet(1,12)); // [1] } }
·TreeSet支持两种排序算法,自然排序和定制排序:
·自然排序:就是升序。
·Comparable接口中包含compareTo(Objectobj)方法,实现该接口类的对象就可以比较大小,比如:a.compareTo(b) 返回负数表示对象a小于对象b,返回0表示a与b相当,返回正数表示a大于b。一些常用类已经实现了该接口的该方法,如:Ingeger数字类,Dage日期类,String字符类,Charater类,Boolean类。
·Comparator接口包含compare(To1, T o2)方法也叫比较器,例如TreeSet类有一个构造器接受Comparator的比较器,比较器是自己定义的比较大小的规则,当compare方法返回负数时表示o1对象小于o2对象,返回0时表示o1与o2相等,返回正数时表示o1大于o2。compare用在自定义的类中需要自己定义排序规则如正序倒序等,比如自己创建一个类类中创建TreeSet集合,此时就能定义一个排序规则的类,然后将这个类的compare比较器传给TreeSet接受Comparator类型参数的构造器就好了,后面有一个例子。
自然排序列子:
上面例子a就是自然排序。因为Integer类实现了compareTo接口都是按照自然排序来的。
自定义排序:
反排序:
import java.util.*;
public class TreeSetTest3
{
public static void main(String[] args)
{
TreeSet s = new TreeSet(new MyComparator()); //因为集合是带泛型声明的,这里没有赋予泛型实参,所以默认就是Object类型的。
s.add("A"); //这里面的类型是Object的子类
s.add("C");
s.add("B");
for(Object si : s) //这里的si和s都是Object类型的,并不是String类型的
{
String sic = (String)si; //所以这里需要进行强制类型转换
System.out.println(sic); //这样才能输出正确的结果,不然会报错类型错误
}
}
}
class MyComparator implements Comparator //TreeSet构造器传入的Comparator类,实现compare方法
{
public int compare(Object a, Object b)
{
String a1 = (String)a;
String b1 = (String)b;
return b1.compareTo(a1); //这里是String类的Comparable接口的compareTo方法。这里b1比a1就是反排序,a1比b1就是自然排序了。
}
}
·如果用自定义的类型的数据的话,那么不能比较两个对象类型的大小,因为自定义类型没有实现compara方法,可以自行实现一个compara比较器后就能进行自定义排序了,否则没有比较器会报错的。
发表评论
-
Calendar
2015-01-21 10:52 752Calendar cal = Calendar.getIn ... -
java中的堆、栈、常量池
2014-11-21 16:20 770Java内存分配: 1. 寄存器:我们在程序中无法控制 2. ... -
hibernate 想忽略对象的某个属性不保存金数据库
2014-11-14 15:10 1107... -
new关键字和newInstance()
2014-02-19 14:17 495new关键字和newInstance()方法的区别: new ... -
类名.class, class.forName(), getClass()区别
2014-02-19 14:17 1210.getClass()是动态的,其余是静态的。 .clas ... -
getDeclared××× 方法和 get××× 方法的区别
2014-02-19 10:40 915Java 的 Class 类提供了很 ... -
延迟加载 lazy="true"
2013-12-10 10:16 951TpkXw.hbm.xml <property ... -
Struts2中struts.xml配置详解
2013-07-19 22:30 0package作用:使用package可以将逻辑上相关的 ... -
线程池
2013-07-04 23:50 1063线程池 为什么要用线程池: 减少了创建和销毁线程的次数,每 ... -
equal 和hashcode
2013-07-04 22:40 986public static void main(String ... -
多线程实例
2013-07-04 17:18 928多线程-用JAVA写一个多线程程序,写四个线程,其中二个对一个 ... -
Jsp中嵌入java代码的三种标签方式
2013-06-21 21:22 18241.表达式标签 <%= 1+1 %> ... -
jsp引入标签taglib和在web中配置的区别
2013-06-21 21:06 1503<%@taglib uri="tagLibra ... -
垃圾回收
2013-06-20 22:33 31 引言 Java的一个 ... -
HashMap遍历的两种方式
2013-06-20 10:03 959第一种: Map map = new HashMap() ... -
java 静态块、非静态块、静态函数、构造函数 执行顺序
2013-04-27 17:50 2301java中经常有一些静态块,这是用来在生成类之前进行的初始化, ... -
静态代码块,普通代码块,构造函数的执行顺序
2013-04-25 16:08 1239相同点:都是在JVM加载类时且在构造方法执行之前执行,在类中都 ... -
JVM加载Class文件的原理机制
2013-04-17 21:30 31991.Java中的所有类,必须被装载到jvm中才能运行,这个装载 ... -
java异常处理之自定义异常类
2013-04-17 17:33 1552/*自定义异常*/ class ChushulingExc ... -
String一系列知识点
2013-04-13 14:06 937一、intern()方法 当调用 intern 方法时,如果池 ...
相关推荐
Java集合框架是Java编程语言中的一个核心部分,它为数据存储和管理提供了高效且灵活的解决方案。本思维导图及总结旨在深入理解并掌握Java集合的相关概念和使用方法。 首先,我们来了解一下Java集合框架的基本构成。...
本文将深入探讨Java集合框架的基础知识,包括接口、类、以及它们在实际开发中的应用。 首先,Java集合框架由一系列接口和实现这些接口的类组成。主要的接口有`List`、`Set`和`Queue`,它们各自代表了不同特性的数据...
在这个“java集合练习题”中,我们主要关注如何使用Java集合框架来处理数据,特别是对于学生信息的存储、排序和输出。以下是对这个练习题的详细解析: 1. **集合框架简介**: Java集合框架是Java API的一部分,它...
Java集合框架是Java编程语言中不可或缺的一部分,它提供了一组高效的数据结构和算法,使得开发者可以方便地存储和管理对象。这份"Java集合思维导图.xmind.zip"压缩包文件,显然旨在帮助学习者深入理解Java集合框架的...
### Java集合知识大全 #### 一、集合概述 在Java编程语言中,集合是一组用于存储其他对象的对象。集合框架提供了多种数据结构,用于管理不同类型的数据。这些数据结构包括列表(List)、集(Set)、映射(Map)等,每种...
xmind格式的Java集合框架学习导图,包括Collection接口/Map接口以及具体实现类。 同样包含大厂面试题,也在导图中有所体现。 能学到什么: 更加成体系的知识框架,更加全面的、系统的知识。 思维导图: 思维导图具有...
### Java集合排序及Java集合类详解 #### 一、集合框架概述 集合框架是Java编程语言的核心组件之一,用于组织和操作数据集。Java集合框架提供了多种数据结构,包括列表(List)、集(Set)和映射(Map),这些数据结构...
Java集合框架是Java编程语言中的一个核心组成部分,它为数据存储和操作提供了丰富的接口和类。在本篇中,我们将深入探讨Java集合的排序机制以及集合类的详细使用。 首先,我们来了解一下Java集合的基本分类。Java...
Java集合框架中的`List`接口和数组(Array)是两种常用的数据结构,它们在处理数据时各有优势。下面我们将深入探讨如何在Java中实现集合的分组与排序。 1. **集合分组**: 集合分组通常涉及到`GroupingBy`操作,这...
Java集合框架是Java编程语言中用于存储和管理对象的核心组件,它包括了各种接口和类,为处理数据提供了丰富的选择。在本次实验中,我们深入学习了Java集合框架中的两个主要部分:List接口和Map接口,以及它们的主要...
【Java集合】 Java集合框架是Java编程语言中用于存储和操作对象的工具,它提供了多种数据结构,如列表、集、映射等,以适应不同的数据处理需求。集合类通常位于`java.util`包下,是Java程序员必备的知识点。 1. **...
### Java集合框架总结 #### 一、Java集合框架概述 Java集合框架是Java标准库的一部分,它提供了一系列的接口和类来存储和操作各种类型的对象集合。这些接口和类遵循一致的设计模式,使得开发人员可以方便地管理和...
Java 集合类详解 Java 集合类是 Java 语言中的一种基本数据结构,用于存储和操作大量数据。集合类可以分为三大类:Collection、List 和 Set。 Collection 是集合框架中的根接口,提供了基本的集合操作,如 add、...
Java集合框架是Java编程语言中一个非常重要的组成部分,它提供了一组高级的数据结构,使得开发者能够更方便地管理和操作对象。在本次实验中,我们主要关注了三个主要的集合接口:Set、List和Map,以及它们的一些常见...
Java集合框架是Java编程语言中一个非常重要的组成部分,它为开发者提供了存储和操作对象的统一接口和类。这个框架使得处理各种数据结构变得更加方便和高效。在这个“java集合框架的使用”主题中,我们将深入探讨如何...
Java集合框架是Java编程语言中不可或缺的一部分,它提供了一组接口和类,用于高效地存储、管理和操作数据。这个“一个讲解很清晰的Java集合框架PPT”显然是一个对外公开的教育资源,旨在帮助学习者深入理解Java集合...
Java集合框架是Java编程语言中的核心部分,它提供了一种高效、灵活的方式来组织和操作对象的集合。在Java中,集合主要分为两大类:Collection和Map。本文将深入讲解Java集合类,特别是Collection接口和其下的List、...
Java集合整体讲解,其中包含了Collection,Map,Iterator和一些工具类,以及集合整体大框架
Java集合框架是Java编程语言中的核心组件之一,它为存储、管理和操作对象提供了一套高效且灵活的工具。本系列深入讲解了Java集合框架中的重要组成部分,包括HashMap、ArrayList、LinkedHashMap、HashSet以及...