java基础第十四天 集合Collection
来源:互联网 发布:用c语言写求整数绝对值 编辑:程序博客网 时间:2024/05/18 13:44
1、集合Collection
1.什么是集合
集合就是一个容器,我们之前的学的容器有:数组,StringBuffer。
2.集合和数组的区别:
a、长度区别 集合长度可变 数组长度固定b、内容区别 集合可以存储不同引用类型的数据 数组只能存储相同类型的数据,但是他可以存储基本类型的数据
3、集合的体系结构
集合有两大体系:Collection 存储单列数据 List 有序,可重复 ArrayList 底层实现是数组,插入慢,访问快,默认使用 LinkedList 底层实现是链表,插入快,访问慢 Vector 底层实现是数组,插入慢,访问快,但是是线程安全的,已不建议使用 Set 无序,不能重复 HashSet 底层是有哈希表实现,可存储null LinkedHashSet 底层是由哈希表和链表实现,插入快,访问慢 TreeSet 自动排序Map 存储两列数据(Key value),键值对 HashMap linkedHashMap TreeMap HashTable
4、常用方法
4.1增加方法:boolean add(E e) 确保此 collection 包含指定的元素(可选操作)。 boolean addAll(Collection<? extends E> c) 将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。 4.2转数组方法:Object[] toArray() 返回包含此 collection 中所有元素的数组。 4.3删除方法:boolean remove(Object o) 从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。 boolean removeAll(Collection<?> c) 移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。4.4判断方法:boolean contains(Object o) 如果此 collection 包含指定的元素,则返回 true。 boolean containsAll(Collection<?> c) 如果此 collection 包含指定 collection 中的所有元素,则返回 true。 boolean isEmpty() 如果此 collection 不包含元素,则返回 true。 4.5获取集合长度的方法: int size() 返回此 collection 中的元素数。 4.6集合遍历: 1、使用Collection标准的迭代器方法: Iterator<E> iterator() 返回在此 collection 的元素上进行迭代的迭代器。 //使用迭代器遍历Collection接口 Iterator itr = c1.iterator(); //判断迭代器是否有下一个元素,有就处理没有就退出循环 while(itr.hasNext()){ Student s = (Student)itr.next(); System.out.println(s); } 2、foreach //通过foreach循环遍历集合 //什么是foreach?也叫增强for循环,是java1.5之后的特性 for (Object obj : c1) { //向下转型,可以使用子类的特有的方法 Student student = (Student)obj; System.out.println(student); } 4.7交集功能: boolean retainAll(Collection<?> c) 仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。
2、List接口
List是Collection接口的子接口
特点:
1、元素有序、且可重复2、每个元素都有自己的索引,我们可以根据这个索引来访问其对应的元素
常用实现类:
1、ArrayList2、LinkedList3、Vector
常用方法(自己扩展的方法):
void add(int index, Object ele) //在指定位置添加元素 boolean addAll(int index, Collection eles) //可以将另外一个集合添加到指定位置 Object get(int index) //根据索引获取集合中的元素 int indexOf(Object obj) //判断一个对象首次一次出现的位置 int lastIndexOf(Object obj) //判断一个对象最后一次出现的位置 Object remove(int index) //根据索引移除对象 Object set(int index, Object ele) List subList(int fromIndex, int toIndex)
List接口遍历
1、迭代器 Iterate itr = list.iterator); while(itr.hasNext()){...}2、foreach for(Object object:list){...}3、for和Iterator for (Iterator iterator = list.iterator(); iterator.hasNext();) {...}4、普通for循环 for (int i = 0; i < list.size(); i++) {...}
1.ArrayList
List的三大子类:
1、ArrayList: 底层数据结构是数组,访问快,插入慢 2、LinkedList 底层数据结构是链表,插入快,访问慢 3、Vector 底层是数组,访问快,插入慢,但是他是线程安全的,性能不如ArrayList
该怎么使用呢?
1、如果你的数据修改很少,访问很多 选ArrayList 2、如果你的数据经常变更,很少访问 选LinkedList 3、Vector不建议使用 4、如果我根本不清楚据访问多还是存储多 那么就选ArrayList
泛型编写数字:
1、泛型卸载<>之间 2、跟在类的后面
2.LinkedList
List实现类之:LinkedList:
对于频繁的插入或删除元素的操作,建议使用LinkedList类,效率较高
新增方法:
void addFirst(Object obj) //将指定元素插入此列表的开头。void addLast(Object obj) //将指定元素插入此列表的开头。Object getFirst() //返回此列表的第一个元素。Object getLast() //返回此列表的第一个元素。Object removeFirst() //移除并返回此列表的第一个元素。Object removeLast() //移除并返回此列表的第一个元素。
案例:
- 要求你是用LinkedList模拟实现栈(Stack)的数据结构
- 栈的数据结构忒点:
- 数据先进后出
-
- 思路:
- 1、编写自定义Stack类
- 2、提供一个add方法,能够添加数据
- 3、提供一个get数据,能过获取数据
3.Vector
List实现类之:Vector
线程安全,并发访问就慢
void addElement(Object obj)void insertElementAt(Object obj,int index)void setElementAt(Object obj,int index)void removeElement(Object obj)void removeAllElements()
3、Set接口
Collection子接口之:Set
特点:
无序,且不能有重复的元素
子类:
HashSet: 底层数据结构是哈希表LinkedHashSet:底层数据结构是链表+哈希表 TreeSet:底层数据结构是红黑树,自动排序
3.1 HashSet
HashSet特点:
1、无序(存进去和取出来的顺序不一样)2、HashSet 不是线程安全的3、集合元素可以是 null
怎么保证数据的唯一性:
1、先判断hashcode
2、在判断equals
如果需要存储自定义的对象,那么我们最好重写hashcode()和equals()方法
怎么重写呢?很简单:
eclipse:shift+alt+s来生成
3.2 LInkedHashSet
set实现类之二:LinkedHashSet
LinkedHashSet是HashSet的子类
数据结构:
链表+哈希表
特点:
有序(由链表保证) 数据不能重复
阅读全文
0 0
- java基础第十四天 集合Collection
- Day14第十四天 java基础---------集合
- 黑马程序员--Java基础学习(集合框架)第十四天
- Java基础第十四天学习日记_集合、List集合、Set集合
- java第十四天_set集合,泛型
- Java基础---集合Collection
- java基础 - 集合Collection
- Java基础----集合 Collection
- 传智博客JAVA基础第十四天
- Java基础第十四天--Map, HashMap, TreeMap
- No_16_0307 Java基础学习第十四天
- 第十四天:集合
- 《黑马程序员》 集合Collection ArrayList第十四天
- java第十四天 泛型
- JAVA学习第十四天
- java第十四天
- Java学习第十四天
- 梦入IBM之java基础第十四天反射
- win10安装MySQL
- 城市列表
- stray'\273'解决办法
- SVN客户端与服务端安装详解
- poj1308
- java基础第十四天 集合Collection
- 频道管理依赖以及代码实现
- 1.1.6难处理的符号
- SAP ABAP ALV构建动态输出列与构建动态内表
- HYSBZ
- HTML5-zepto介绍
- 进程与线程
- Windows API 应用总结
- 解决java.lang.UnsatisfiedLinkError: No implementation found for java.lang.String 报错的一个小方法