java中的集合和视图
一、集合的概念
何为集合,集合就是相当于一个对象的容器。集合是类似数组的一个作用。既然有了数组,为何还要有集合呢,由于数组对象一旦创建,其大小便不可以更改,我们只能往数组中存放创建时数量的对象。而集合中的长度却是动态可变化的,我们可以往集合中添加任意数量的对象。并且我们可以通过集合更方便地实现数据结构如队列,栈等等。在集合中我们更可以定义自己想要的操作。
二、集合的定义
java中集合类的基本接口是Collection,实现集合接口,需要实现集合接口中的一下方法:
class ExtendCollection<T> implements Collection<T>{
public void forEach(Consumer<? super T> action) {
// TODO Auto-generated method stub
}
public int size() {
// TODO Auto-generated method stub
return 0;
}
public boolean isEmpty() {
// TODO Auto-generated method stub
return false;
}
public boolean contains(Object o) {
// TODO Auto-generated method stub
return false;
}
public Iterator<T> iterator() {
// TODO Auto-generated method stub
return null;
}
public Object[] toArray() {
// TODO Auto-generated method stub
return null;
}
public <T> T[] toArray(T[] a) {
// TODO Auto-generated method stub
return null;
}
public boolean add(T e) {
// TODO Auto-generated method stub
return false;
}
public boolean remove(Object o) {
// TODO Auto-generated method stub
return false;
}
public boolean containsAll(Collection<?> c) {
// TODO Auto-generated method stub
return false;
}
public boolean addAll(Collection<? extends T> c) {
// TODO Auto-generated method stub
return false;
}
public boolean removeAll(Collection<?> c) {
// TODO Auto-generated method stub
return false;
}
public boolean removeIf(Predicate<? super T> filter) {
// TODO Auto-generated method stub
return false;
}
public boolean retainAll(Collection<?> c) {
// TODO Auto-generated method stub
return false;
}
public void clear() {
// TODO Auto-generated method stub
}
public Spliterator<T> spliterator() {
// TODO Auto-generated method stub
return null;
}
public Stream<T> stream() {
// TODO Auto-generated method stub
return null;
}
public Stream<T> parallelStream() {
// TODO Auto-generated method stub
return null;
}
在Collection接口中使用了Iterator接口,Iterator接口的内部组成如下:
public interface Iterator<E>{
void remove();
E next();
boolean hasNext();
}
通过实现我们的Iterator,Iterator就是一个迭代器,通过以下代码我们就可以循环遍历集合中的每一个元素:
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c"); // 获取迭代器
Iterator iterator = list.iterator();
// 判断集合中是否存在下一个元素
while(iterator.hasNext()){
// 获取集合中的元素
String str = iterator.next().toString();
System.out.println(str);
}
另外我们还可以使用for each去循环遍历集合中的元素:这种方式在实际上原理就是使用了上面的代码进行遍历。
for(String item: list){
System.out.println(item);
}
for each关键字用于实现Iterable接口的对象,Iterable接口对象中只有一个方法,即获取迭代器的方法
public interface Iterable<E>{
Iterator<E> iterator();
}
java中的集合框架接口

java中的集合框架类

三、视图的概念
java中的视图,可以说其实就是一个具有限制的集合对象,只不过这里的不是集合对象,而是一个视图对象。例如:这里有一个Test类
Test[] tests = new Test[10];
List<Test> testList = Arrays.asList(tests);
这里的testList是一个视图对象,具有访问数组元素set,get的方法。但是如果调用改变数组的方法就会抛出异常。所以可以说视图对象可以说是具有限制的集合对象。
利用java类库中的方法我们可以获得不可更改视图,子视图等等,这些视图对于原对象具有不同的操作权限。
四、java中集合和数组的转换
将数组转换成集合
String[] values = {"my","a"};
HashSet<String> test = new HashSet<String>(Arrays.asList(values));
将集合转换成数组
String[] values = test.toArray(new String[0]);
java中的集合和视图的更多相关文章
- java中的集合操作类(未完待续)
申明: 实习生的肤浅理解,如发现有错误之处.还望大牛们多多指点 废话 事实上我写java的后台操作,我每次都会遇到一条语句:List<XXXXX> list = new ArrayList ...
- Java中的集合框架-Collections和Arrays
上一篇<Java中的集合框架-Map>把集合框架中的键值对容器Map中常用的知识记录了一下,本节记录一下集合框架的两个工具类Collections和Arrays 一,Collections ...
- JAVA笔记整理(九),JAVA中的集合
在工作中,我们经常需要将多个对象集中存放,可以使用数组,但是数组的长度一旦固定之后是不可变的,为了保存数量确定的数据,我们可以使用JAVA中的集合. 在我看来,JAVA中的集合可以看作是一个特殊的数据 ...
- Java中的集合(七)双列集合顶层接口------Map接口架构
Java中的集合(七)双列集合顶层接口------Map接口 一.Map接口的简介 通过List接口,我们知道List接口下的集合是单列集合,数据存储是单列的结构.Map接口下是一个键值对(key-v ...
- Java 中的集合接口——List、Set、Map
Java 中的集合接口——List.Set.Map 什么叫集合:集合就是Java API所提供的一系列类的实例,可以用于动态存放多个对象.这跟我们学过的数组差不多,那为什么我们还要学集合,我们看看数组 ...
- 实现java 中 list集合中有几十万条数据,每100条为一组取出
解决"java 中 list集合中有几十万条数据,每100条为一组取出来如何实现,求代码!!!"的问题. 具体解决方案如下: /** * 实现java 中 list集合中有几十万条 ...
- java中对集合对象list的几种循环访问
java中对集合对象list的几种循环访问的总结如下 1 经典的for循环 public static void main(String[] args) { List<String> li ...
- 菜鸟日记之 java中的集合框架
java中的集合框架图 如图所示:java中的集合分为两种Collection和Map两种接口 可分为Collection是单列集合和Map的双列集合 Collection单列集合:继承了Iterat ...
- C#与java中的集合区别
集合一般的操作 插入: add 删除: remove 查找: contains,remove java中的集合 注意哪些是接口,哪些是实现类 使用集合的时候 1. ...
随机推荐
- 洛谷P4207 [NOI2005]月下柠檬树(计算几何+自适应Simpson法)
题面 传送门 题解 我还好奇自适应辛普森法干嘛用的呢--突然想起来积分的一个用处就是求曲边图形的面积-- 我们先来考虑一下这些投影是什么形状 一个圆的投影还是它自己 一个圆锥的投影是一个圆加上一个点, ...
- Java FileInputStream与FileReader的区别
在解释Java中FileInputStream和FileReader的具体区别之前,我想讲述一下Java中InputStream和Reader的根本差异,以及分别什么时候使用InputStream和R ...
- [转]Why you shouldn't use set (and what you should use instead)
Why you shouldn't use set (and what you should use instead) --- stl::set和sorted ector对比Matt Austern ...
- sticky footer布局
一.什么是sticky footer 在网页设计中,Sticky footers设计是最古老和最常见的效果之一.它可以概括如下:如果页面内容不够长的时候,页脚块粘贴在视窗底部:如果内容足够长时,页脚块 ...
- linux下配置apache多站点访问-小案例
一级域名(baidu.com)也叫作顶级域名,注册一级域名是需要付费的. 而二级域名(image.baidu.com)是一级域名的延伸,所以只要购买了一级域名,二级域名是可以任意配置的. 其实(www ...
- 5.js与jQuery入口函数执行时机
js与jQuery入口函数执行时机区别: JS入口函数是在所有资源加载完成后,才执行.(包括:页面.外部js文件.外部css文件.图片) jQuery入口函数,是在文档加载完成后就执行.文档加载完成指 ...
- Qt 学习之路 2(54):剪贴板
Qt 学习之路 2(54):剪贴板 豆子 2013年6月8日 Qt 学习之路 2 2条评论 剪贴板的操作经常和前面所说的拖放技术在一起使用.大家对剪贴板都很熟悉.我们可以简单地把它理解成一个数据存储池 ...
- 移动端适配1px问题
(function(document) { var dcl = document.documentElement, wh; var scale = 1/window.devicePixelRatio; ...
- mysql id_logfile 日志
ib_logfile 文件原理 ib_logfile0 是innodb中事务日志,记录系统的回滚,重做日志,记录的是文件的物理更改,存放位置my.ini 中的 datadir="D:\php ...
- POJ_3069 Saruman's Army 【贪心】
一.题面 POJ3069 二.题意分析 我的理解是,可以在每个点设置一个监测点,能够监测到范围R内的所有其他点,那么问给出N个点的一维位置,需要在其中挑多少个监测点把所有点都监测到. 贪心解决: 1. ...