黑马程序员——java 集合
来源:互联网 发布:怎么禁止mac休眠 编辑:程序博客网 时间:2024/05/19 13:08
——- android培训、java培训、期待与您交流! ———-
Collection接口:
Collection 接口是List和Set的父接口List 接口存储一组允许重复,有序(插入顺序)的对象Set 接口存储一组唯一,无序的对象
List接口:
List 接口存储一组允许重复,有序(插入顺序)的对象(包括null),可以通过索引(下标)来进行访问存储(添加)boolean add(Object o) 继承自Collectionvoid add (int index,Object o) 加塞儿专用替换set(int index,Object o)删除remove(Object o) 继承自Collectionremove(int index)void clear() 继承自Collection判断boolean contains(Object o) 继承自Collection 思考:内部怎么实现?boolean isEmpty() 继承自Collectionint indexOf(Object o)int lastIndexOf(Object o)获取int size() 继承自Collection 集合中存了多少个数据 相当于数组.lengthObject get(int index) 相当于arr[i]Object[] toArray() 继承自Collection
List接口常用实现类:
Vector(向量列表):底层数据结构是动态的数组结构,线程安全,无论增删还是查询都非常慢。默认初始容量为10,增量为10。ArrayList(线性列表):底层数据结构是动态的数组结构,线程不安全,增删的效率很慢(因为要移动数据),但是随机查询的效率很高。默认初始容量为10,增量未指定(经调试发现:原容量的50%)。LinkedList(链式列表):底层是链表数据结构,线程不安全,对元素的增删的操作效率很高,随机查询的效率低(因为要移动指针寻址)。默认初始容量为0,增量不明确。
Vector:
构造方法:public Vector()public Vector(int initialCapacity)public Vector(int initialCapacity,int capacityIncrement)其他常用方法来自List接口
ArrayList:
构造方法:public ArrayList()public ArrayList(int initialCapacity)其他常用方法来自List接口
LinkedList:
构造方法public LinkedList()独有方法:public void addFirst(Object e) 相当于add(0, e)public void addLast(Object e) 相当于add(e)public Object getFirst() 相当于get(0)public Object getLast() 相当于get(al.size()-1)public Object removeFirst() 相当于remove(0)public Object removeLast() 相当于remove(al.size()-1)
//--------------测试效率(加塞操作)-----------------ArrayList al=new ArrayList();long begin=System.currentTimeMillis();for (int i = 0; i < 200000; i++) { al.add(0,"1");}long end=System.currentTimeMillis();System.out.println(end-begin);
泛型:
集合可以存储任意类型的对象,因此在从集合中取出这些对象时需要强转,但如果存储的不是同一种类型,取出对象时怎么强转?这就是类型安全问题泛型即(Generic type),是Java 5新加入的特性,它只能用于引用数据类型(基本数据类型使用包装类),用来解决类型安全问题,怎么解决?泛型的本质是类型参数化,即让类型“任意化”,就是在定义(类型的定义,方法的定义,参数的定义,成员变量的定义等等)的时候,设置它的类型可变,也就是数据类型可以是任意的类型
public class FanxingLei<T> { private T name1; private Object name2; public void setName1(T name) { } public T getName1(){ return name1; } public void setName2(Object name) { } public Object getName2(){ return name2; }}
FanxingLei fLei=new FanxingLei();fLei.setName2(new Student("a", 20));fLei.setName2("abc");Student temp=(Student)fLei.getName2();FanxingLei<Student> fLei2=new FanxingLei<Student>();fLei2.setName1(new Student("a", 20));//fLei2.setName1("abc");temp=fLei2.getName1();
Set接口:
Set 接口存储一组唯一,无序的对象唯一:Set集合中不允许出现重复的元素,如果向Set集合中存储重复的元素是无效的,但不会报错无序:Set集合不会维护集合中元素的插入顺序,也不存在下标或索引Set接口中没有自有方法,全部继承自Collection接口,可查阅帮助文档进行使用
Set接口常用实现类:
HashSet是无序的吗?是唯一的吗?往Set集合中存储对象时,Java如何判断集合中是否已存在该对象?遍历集合、逐个用equals比较?可行吗?效率怎么样? 先判断hashCode,不相等就添加;如果相等则判断equals,不相等就添加HashSet采用哈希(散列)数据结构来存储对象,大大提高查询效率。不保证线程安全
Set接口常用实现类:
TreeSet无序、唯一以树形结构(平衡二叉树)存储,访问或遍历的速度快,默认按自然顺序进行存储是自然顺序作为遍历顺序吗?不保证线程安全自有方法:public Object ceiling(Object e)public Object floor(Object e)public Object first()public Object last()public Object higher(Object e)public Object lower(Object e)
Java集合迭代器:
ArrayList<String> al=new ArrayList<>();Iterator<String> it=al.iterator();while(it.hasNext()){ String temp=it.next(); System.out.println(temp);}HashSet<String> hs=new HashSet<>();Iterator<String> itt=hs.iterator();while(itt.hasNext()){ System.out.println(itt.next());}
迭代器设计模式:
迭代器是一种设计模式,可以遍历某容器(集合)。自定义一个集合类通过数组模拟迭代器设计模式(画结构图)Java集合中的迭代器如何设计?java.lang.Iterable接口Iterator<T> iterator() 返回一个迭代器,相当于一个导游java.util.Iterator接口boolean hasNext() 还有没有下一个E next() 获得下一个void remove() 用来解决ConcurrentModificationException(并发修改异常)可以查阅ArrayList和HashSet的源码进行了解迭代器也支持泛型
Map接口:
Map是比较特殊的集合,也叫映射,它一次存储两个数据(一个键值对,Entry)。键(key)和值(value)可以是任何类型,键不允许重复,值允许重复。一个键有且只能对应一个值。存储V put(K key, V value) 键如果重复会覆盖值删除void clear()V remove(Object key) 根据键删除键值对儿判断boolean containsKey(Object key) 先判断hashCode 然后判断equalsboolean containsValue(Object value) 判断equalsboolean isEmpty()获取V get(Object key) 根据键得到对应的值int size()Set<K> keySet()Collection<V> values()Set<Map.Entry<K,V>> entrySet()
Map接口常用实现类:
HashMap,基于哈希表结构的Map实现,允许使用null值和null键,不保证顺序,不保证线程安全。构造方法 public HashMap(),构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空HashMap对象。其他方法来自Map接口LinkedHashMap,基于哈希表和链表结构的Map实现,允许使用null值和null键,维护插入顺序做为遍历顺序,不保证线程安全。构造方法 public LinkedHashMap(),构造一个带默认初始容量 (16) 和加载因子 (0.75) 的空LinkedHashMap对象。其他方法来自Map接口
Map接口常用实现类:
TreeMap,基于平衡二叉树结构的Map实现,不允许null键,允许null值。根据其键的自然顺序进行排序。不保证线程安全。构造方法: public TreeMap(),使用键的自然顺序构造一个空的对象。自有方法: public Map.Entry<K,V> ceilingEntry(K key) public K ceilingKey(K key) public Map.Entry<K,V> firstEntry() public K firstKey() public Map.Entry<K,V> lastEntry() public K lastKey() public Map.Entry<K,V> higherEntry(K key) public K higherKey(K key) public Map.Entry<K,V> lowerEntry(K key) public K lowerKey(K key)
Map的迭代器:
如果只遍历所有的键,Set<K> keySet()如果只遍历所有的值,Collection<V> values()如果想成对儿遍历,能用foreach或昨天的迭代器直接对Map集合进行遍历吗?如果想成对儿遍历,有如下两种方式:方式一:获得所有的key,然后根据key找到value (上午已讲)方式二:Map.Entry接口,用于获取键值对的集合K getKey()返回与此项对应的键。V getValue()返回与此项对应的值。
——- android培训、java培训、期待与您交流! ———-
0 0
- 黑马程序员——Java集合类
- 黑马程序员——java集合
- 黑马程序员——JAVA集合
- 黑马程序员——Java集合
- 黑马程序员——Java集合
- 黑马程序员——java集合
- 黑马程序员——Java基础---集合
- 【黑马程序员】 java笔记——集合
- 黑马程序员——Java集合框架
- 黑马程序员——Java基础---集合
- 黑马程序员——Java集合Collection
- 黑马程序员——java基础: 集合
- 黑马程序员——Java集合
- 黑马程序员——Java集合框架
- 黑马程序员——Java基础 ---集合
- 黑马程序员——Java集合
- 黑马程序员——Java基础---集合
- 黑马程序员——Java基础---集合
- 第三天
- DDuilib入门-XML布局【二】
- Android:AsyncTask 随记
- 读书笔记 -- 008_数据挖掘_聚类_基于层次的方法
- Java学习----封装 、继承、 内存管理
- 黑马程序员——java 集合
- 1013. 数素数 (20)
- 合并两个排序的链表---递归实现
- Linux centOS下安装配置openfire
- linux使用VNC服务轻松远程安装oracle
- WebService (一) WebService概念
- 各种数据结构的访问优缺点
- 简单矩阵 数据个数的计数
- Dalvik和JVM的区别