今天这篇博客是来为大家分享一下我在《疯狂JAVA讲义》中学习到的集合知识
java集合类是一种十分有用的类,用于存放数量不等的对象,并可以实现常用的数据结构。java集合大致分为set map list queue。set是一种无序的并且元素不可重复的集合(若重复数据 则只有一个有效数据存在),List代表的是有序并且元素可以重复的集合,Map则代表具有一定映射关系的集合,java5又包含Queue体系集合,代表的是队列集合实现。
java集合类主要由两个接口派生而成Collection接口和Map接口,这两种接口是JAVA集合框架的根接口
注:Collection是根接口 矩形框的子接口为常用的集合类
注:Map是根接口 矩形框的子接口为常用的集合类
set集合似一个罐子,把一个对象添加到set集合中,set集合无法记住这个元素的添加顺序,所以不允许重复,List集合像一个数组,但其长度可以改变,并且可以记住每次添加元素的顺序。Map也像一个罐子,但是其每条数据都是由Key,Value键值对组成的。
Collection接口中定义了如下的操作元素集合的方法:
- boolean add(object o)添加一个元素到集合中,成功则返回True
- boolean addAll(Collection c)把集合c的所有元素添加到前方指定集合中,成功则返回True
- void clear()清除集合中的所有元素,将其长度变为o
- boolean contains(Object o)返回集合中是否包含指定元素o
- boolean containsAll(Collection c)返回集合是否包含指定的集合c中所有元素
- boolean isEmpty()返回集合是否为空,若集合长度为0则返回True
- Iterator iterator() 返回一个Iterator对象用于遍历集合中的元素
- boolean remove(Object o)删除集合中指定元素o,若有多个待删除元素则只删除第一个元素
- boolean removeAll(Collection c) 从集合中删除c集合中的所有元素相当于A集合-C集合
- boolean retainAll(Collection c)从集合中删除c集合不包含的元素相当于A集合与C集合的交集,方法返回的结果B <= C
- int size() 返回集合中元素的个数
- Object[] toArray()集合转换为一个数组,集合元素转变为数组元素
接下来上代码
public class CollectionTest {
public static void main(String[] args) {
//list 清单是一个有序的元素可重复的集合
Collection c = new ArrayList();
//添加元素
c.add("孙悟空");
//集合中不能存放基本类型 但Java支持自动装箱成为其包装类 此中的6位Integer类
c.add(6);
//c.size() 输出元素的个数 返回值int
System.out.println("c集合的元素个数为:" + c.size());
//删除指定元素
c.remove(6);
System.out.println("c集合的元素个数为:" + c.size());
//判断是否包含指定字符串 返回Boolean
System.out.println("c集合是否包含孙悟空这个字符串" + c.contains("孙悟空"));
c.add("轻量级JAVA EE ");
System.out.println("c集合元素" + c);
//set中的元素不可重复 就像一个罐子且不知道元素的顺序
Collection books = new HashSet();
books.add("HELLO WORLD");
books.add("I love you");
System.out.println("c集合是否包含books集合?" + c.contains(books));
//删除c集合中所有元素
c.clear();
System.out.println("c集合中所有元素" + c);
}
}
**运行结果为:
c集合的元素个数为:2
c集合的元素个数为:1
c集合是否包含孙悟空这个字符串true
c集合元素[孙悟空, 轻量级JAVA EE ]
c集合是否包含books集合?false
c集合中所有元素[]
**
注:上段代码中出现了Hashset,和ArrayList,虽然二者的实现类不同,但是当成collection使用的时候,可以使用Collection所提供的所有增删等方法.并且collection接口重写了toString方法 个能一次性的输出元素以数组的形式。
使用Lambda表达式遍历集合:
public class CollectionEach {
public static void main(String[] args) {
//创建一个set集合 输出的结果不一定是按照add方法添加的顺序,因为set集合是无序的
Collection books = new HashSet();
books.add("轻量级 JAVA ee 企业应用实战");
books.add("疯狂JAVA讲义");
books.add("疯狂安卓讲义");
//调用forEach方法遍历 并且使用Lambda表达式
books.forEach(obj -> System.out.println("迭代集合元素" + obj));
}
}
**运行结果为:
迭代集合元素疯狂JAVA讲义
迭代集合元素疯狂安卓讲义
迭代集合元素轻量级 JAVA ee 企业应用实战**
使用Iterator遍历集合元素:
Itertor接口中定义了如下4中方发:
- boolean hasNext()判断被迭代的集合是否还有可迭代元素 有则返回True
- Object next()返回集合中的下一元素
- void remove() 删除集合中上一次next()方法返回的元素
- void forEachRemainin(Consumer action)可以用Lambda表达式来遍历集合元素
public class InteratorEach {
public static void main(String[] args) {
Collection collection = new HashSet();
collection.add("ABC1");
collection.add("ABC2");
collection.add("ABC3");
//获取collection集合的迭代器
Iterator it = collection.iterator();
//采用Lambda方式进行迭代
it.forEachRemaining(obj -> System.out.println("Lambda迭代元素" + obj));
}
}
**运行结果为:
Lambda迭代元素ABC1
Lambda迭代元素ABC2
Lambda迭代元素ABC3**
注:Iterator本身并不提供盛装对象的能力,必须有一个被迭代对象像如上代码块中的collection.iterator()则返回一个Iterator,且用Iterator遍历Collection集合元素时,元素在集合中不可更改,不可变
public class IteratorTest {
public static void main(String[] args) {
//创建一个集合
Collection books = new HashSet();
books.add("疯狂JAVA讲义");
books.add("疯狂安卓讲义");
books.add("轻量级 JAVA ee 企业应用实战");
//获取books集合的迭代器
Iterator it = books.iterator();
while(it.hasNext()){
//it 。 next()方法返回的是object数据类型 需要强制转换
String book = (String) it.next();
System.out.println(book);
if (book.equals("疯狂安卓讲义")){
//从集合中删除上一次next()方法反悔的元素
it.remove();
}
//对book变量赋值 不会改变集合元素本身
book = "12456";
System.out.println(book);
}
}
}
**运行结果为:
疯狂JAVA讲义
12456
疯狂安卓讲义
12456
轻量级 JAVA ee 企业应用实战
12456**
感谢大家捧场 今天的Java干货笔记就写到这里了 故事未完,静待下集。