首页

文章

介绍一些Java集合框架方面的知识?

发布网友 发布时间:2022-02-28 14:23

我来回答

1个回答

热心网友 时间:2022-02-28 15:53

一、综述
所有集合类都位于java.util包下。集合中只能保存对象(保存对象的引用变量)。(数组既可以保存基本类型的数据也可以保存对象)。
当我们把一个对象放入集合中后,系统会把所有集合元素都当成Object类的实例进行处理。从JDK1.5以后,这种状态得到了改进:可以使用泛型来*集合里元素的类型,并让集合记住所有集合元素的类型(参见具体泛型的内容)。
Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些接口或实现类。

Set和List接口是Collection接口派生的两个子接口,Queue是Java提供的队列实现,类似于List。

Map实现类用于保存具有映射关系的数据(key-value)。
Set、List和Map可以看做集合的三大类。
List集合是有序集合,集合中的元素可以重复,访问集合中的元素可以根据元素的索引来访问。
Set集合是无序集合,集合中的元素不可以重复,访问集合中的元素只能根据元素本身来访问(也是不能集合里元素不允许重复的原因)。
Map集合中保存Key-value对形式的元素,访问时只能根据每项元素的key来访问其value。
对于Set、List和Map三种集合,最常用的实现类分别是HashSet、ArrayList和HashMap三个实现类。(并发控制的集合类,以后有空研究下)。
二、Collection接口
Collection接口是List、Set和Queue接口的父接口,同时可以操作这三个接口。
Collection接口定义操作集合元素的具体方法大家可以参考API文档,这里通过一个例子来说明Collection的添加元素、删除元素、返回集合中元素的个数以及清空集合元素的方法。
public class TestCollection
{
public static void main(String[] args)
{
Collection c = new ArrayList();
//添加元素
c.add("孙悟空");
//虽然集合里不能放基本类型的值,但Java支持自动装箱
c.add(6);

System.out.println("c集合的元素个数为:" + c.size());

//删除指定元素
c.remove(6);

System.out.println("c集合的元素个数为:" + c.size());
//判断是否包含指定字符串
System.out.println("c集合的是否包含孙悟空字符串:" + c.contains("孙悟空"));

c.add("轻量级J2EE企业应用实战");

System.out.println("c集合的元素:" + c);

 Collection books = new HashSet();

books.add("轻量级J2EE企业应用实战");
books.add("Struts2权威指南");

System.out.println("c集合是否完全包含books集合?" + c.containsAll(books));

//用c集合减去books集合里的元素
c.removeAll(books);

System.out.println("c集合的元素:" + c);

//删除c集合里所有元素
c.clear();

System.out.println("c集合的元素:" + c);

//books集合里只剩下c集合里也同时包含的元素
books.retainAll(c);

System.out.println("books集合的元素:" + books);
}
}
程序输出结果:

c集合的元素个数为:2c集合的元素个数为:1c集合的是否包含孙悟空字符串:truec集合的元素:[孙悟空, 轻量级J2EE企业应用实战]c集合是否完全包含books集合?falsec集合的元素:[孙悟空]c集合的元素:[]books集合的元素:[]

三、两种遍历集合的方法Iterator接口和foreach循环
1、Iterator接口
Iterator也是Java集合框架的成员,主要用于遍历(即迭代访问)Collection集合中的元素,也称为迭代器。
提供的三种方法:
boolean hasNext():返回集合里的下一个元素。
Object next():返回集合里下一个元素。
void remove();删除集合里上一次next方法返回的元素。
public class TestIterator
{
public static void main(String[] args)
{
//创建一个集合
Collection books = new HashSet();

books.add("轻量级J2EE企业应用实战");
books.add("Struts2权威指南");
books.add("基于J2EE的Ajax宝典");

//获取books集合对应的迭代器
Iterator it = books.iterator();

while(it.hasNext())
{
 //未使用泛型,需要强制转换
String book = (String)it.next();

System.out.println(book);

if (book.equals("Struts2权威指南"))
{
it.remove();

//使用Iterator迭代过程中,不可修改集合元素,下面代码引发异常
//books.remove(book);

}

//对book变量赋值,不会改变集合元素本身
book = "测试字符串";

}
System.out.println(books);
}
}
程序运行结果:

Struts2权威指南基于J2EE的Ajax宝典轻量级J2EE企业应用实战[基于J2EE的Ajax宝典, 轻量级J2EE企业应用实战]

说明:
(1)通过语句“book = "测试字符串"; ”对迭代变量book进行赋值时,当我们再次输出books集合时,集合里的元素没有任何变化。即当使用Iterator对集合元素进行迭代时,Iterator并不是把集合元素本身传给迭代变量,而是把集合元素的值传给了迭代变量。
(2)当使用Iterator来访问Collection集合元素时,只有通过Iterator的remove方法删除(it.remove();)上一次next方法返回的集合元素才可以给集合中添加元素(book = "测试字符串"; )。否则引发java.util.ConcurrentModificationExcption异常。
2、使用foreach循环遍历集合元素。
格式:for(元素类型 t 元素变量 x : 遍历对象A) {
// 程序块
}
说明:
(1)foreach简化了对数组和集合的遍历,如果不希望遍历整个集合,或者在循环内部需要操作下标值就需要使用传统的for循环。
(2)简化了编程,提高了代码的可读性和安全性(不用怕数组越界)。
(3)foreach一般结合泛型使用
实例应用:
public class TestArray {
public static void main(String args[]) {
TestArray test = new TestArray();
test.test1();
test.listToArray();
test.testArray3();

}

/**
* foreach语句输出一维数组
*/
public void test1() {
// 定义并初始化一个数组
int arr[] = { 2, 3, 1 };
System.out.println("----1----排序前的一维数组");

for (int x : arr) {
System.out.println(x); // 逐个输出数组元素的值
}

// 对数组排序
Arrays.sort(arr);

// 利用java新特性for each循环输出数组
System.out.println("----1----排序后的一维数组");

for (int x : arr) {
System.out.println(x); // 逐个输出数组元素的值
}
}

/**
* 集合转换为一维数组
*/
public void listToArray() {
// 创建List并添加元素
List<String> list = new ArrayList<String>();
list.add("1");
list.add("3");
list.add("4");

// 利用froeach语句输出集合元素
System.out.println("----2----froeach语句输出集合元素");

for (String x : list) {
System.out.println(x);
}

// 将ArrayList转换为数组
Object s[] = list.toArray();

// 利用froeach语句输出集合元素
System.out.println("----2----froeach语句输出集合转换而来的数组元素");

for (Object x : s) {
System.out.println(x.toString()); // 逐个输出数组元素的值
}
}

/**
* foreach输出二维数组测试
*/
public void testArray2() {
int arr2[][] = { { 4, 3 }, { 1, 2 } };

System.out.println("----3----foreach输出二维数组测试");

for (int x[] : arr2) {
for (int e : x) {
System.out.println(e); // 逐个输出数组元素的值
}
}
}

/**
* foreach输出三维数组
*/
public void testArray3() {
int arr[][][] = { { { 1, 2 }, { 3, 4 } }, { { 5, 6 }, { 7, 8 } } };

System.out.println("----4----foreach输出三维数组测试");

for (int[][] a2 : arr) {
for (int[] a1 : a2) {
for (int x : a1) {
System.out.println(x);
}
}
}
}
}
程序运行结果:

----1----排序前的一维数组231----1----排序后的一维数组123----2----froeach语句输出集合元素134----2----froeach语句输出集合转换而来的数组元素134----4----foreach输出三维数组测试12345678

感想:
这篇先写到这里,后续文章将会介绍其余集合接口和类的详细知识。
这是自己写博客的第一篇文章,虽然很多内容都是借鉴高手的,但是从他们的字里行间可以看出他们对技术的痴迷和研究的深入。
我从接触Java到现在也就一年多时间,我深深被Java的一些程序表达方式所吸引。感觉它的语言风格更接近我们自然语言的表述。
在程序中表达自己的思想何尝不是一件畅事。
虽然断断续续的自学了一些Java知识,现在也可以看懂Java的大部分代码,但是要是自己去写出那些高深的代码,感觉还是有些棘手。
听大师说,语言是用来思考的。
要是学会了用Java语言进行思考,那么一定可以小有所成。
现在给自己制定了一个计划,就是从写博客来提高自己学习Java的积极性。
首先是一些基础知识的总结,结合一些实例表明知识的应用。
谷歌浏览器怎么设置成中文_谷歌浏览器设置中文语言 【谷歌浏览器技巧】谷歌浏览器如何更改语言? 史上最全ETF全解 证券ETF是深市的吗 怎样把莲藕肉丸子做的好吃? 高三语文小说赏析小说形象分析与答题技巧 人物形象题答题技巧 借助什么分析小说的人物形象 脖子旁边疼是什么原因 在群里不是好友怎么把群里人建另一个群 蛇床子的药理作用 炒蛇床子和生蛇床子有什么区别 为什么把床头垫高点 为什么床头高点儿 为什么要给新生儿抬高床头 人脸识别打卡考勤机找哪家? 背后搞你的人什么心态 很皮的搞笑撩人句子高情商的撩人句子(82句) 恶搞爱情短信 床头挂什么财运最旺最好 床上放什么东西辟邪 道家床头挂什么画最好最旺 床头贴什么最好最旺道家 建设工程竣工后,是否必须取得《规划验收许可证》? 环评竣工验收 手机几年没用了开不了机怎么办 红烧啤酒鸡的家常做法大全怎么做好 双男主泰剧新剧推荐 2019泰剧《爱情理论》小受暗恋花心直男好友 液体卫生巾和普通卫生巾的区别是什么?液体卫生巾的优点 可水洗粘尘垫哪家好 电脑12g够用吗? 宝宝双侧肺炎病变严重吗 什么是洁净气体灭火器 2024年实用父亲节礼物推荐有哪些?(2300字选购指南) 40包速溶咖啡比对 作文请以“这样挺好”为题,写一篇记叙文或议论文,不少于800字。要求... 如何写好作文我就是这么好 惊魂未定什么意思?有什么典故? 安阳火车站到新师院北门的公交车有哪些? 安阳市公交车26从火车站发车多长时间到终点站 太仓汽车站去太仓乐遥浏河公墓坐几路公交 请问廉江市哪里有奥克斯手机专业维修店,急!! 梅赛德斯奔驰E350敞篷版的整体简介及其性能如何 员工出差前需要做什么准备工作? 用(祝愿自己生日快乐)写首藏头诗,希望有才华的人帮帮忙,谢谢了_百度... 请问做爱前吃什么药可以延长做爱时间? 我每天锻炼,然后吃什么,能延长我房事时间?现在两分钟,双方都苦恼。_百 ... 做爱前吃什么最能滋补身体 吃什么能让房事时间长些? JAVA集合框架的总结 JAVA的集合框架中有那些类,他们都有那些区别 为什么要使用Java集合框架 java集合框架问题... JAVA集合框架的介绍 关于java集合框架! java集合框架 java集合框架是怎样 Java集合框架的优点是什么? 如何解除手机号绑定 java集合框架是什么? 如何解除手机绑定 java集合框架是什么意思 手机号码绑定的怎么解除绑定 Java有哪些框架比较常用? 怎么解除和手机号的绑定? java用框架的坏处是什么? 谁能介绍一下JAVA三大框架的各自作用? 与手机号码如何解除绑定 java spring框架有什么用 java集合框架问题!!! JAVA集合框架的框架益处 java集合框架中,包括哪些接口和类? JAVA集合框架的类 JAVA集合框架的集合论引 JAVA集合框架 试题? Java集合框架中的泛型有什么优点 Java的特点有哪些? java有什么特点 java语言的特点有哪些 Java语言主要特点有哪些 java有哪些特点? JAVA的技术特点是什么? Java具有什么特点 Java语言有哪些特点? Java语言有什么特点? Java的特点有哪些 Java语言的特点有哪些? Java有什么优点 java编程有什么优点?
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com