java之集合框架,
分享于 点击 15482 次 点评:93
java之集合框架,
数组 集合数组是固定长度的数据类型是固定的,集合是可变长度的且数据类型亦可变。 数据多了用对象存,对象多了用集合或数组存。 java.util包中 Collection 收集集合 List(元素是有序的可重复,因有索引) set(无序,无索引) ArrayList LinkedList Vector HashSet TreeSet
每一个容器对数据的存储方式都有不同,这个存储方式称之为:数据结构。
共性方法 add(obj);//参数类型是Object,以便于接收任意类型对象 //集合中存储的是对象的引用(地址) size(); remove(); clear(); contains(); isEmpty(); iterator(); retainAll();//交集 a中只会保留b中相同的元素 removeAll();
framework
迭代器 iterator 就是集合的取出元素的方式 Iterator it = a.iterator();//获取迭代器,用于取出集合中的元素 it.next();//获取元素 while(it.hasNext()){ it.next(); } for(Iterator it = a.iterator();it.hasNext();){//局部变量会回收,优化内存使用 it.next(); } 例: HashMap<String, Integer> resultMap = new HashMap<String, Integer>(); resultMap.put("123", 123); resultMap.put("23", 23); resultMap.put("123", 123); resultMap.put("33", 33); Set<Entry<String, Integer>> set = resultMap.entrySet();
Iterator<Entry<String, Integer>> it = set.iterator();//获取迭代器,用于取出集合中的元素 // it.next();//获取元素 while(it.hasNext()){ System.out.println(it.next()); } for(Iterator<Entry<String, Integer>> it2 = set.iterator();it.hasNext();){//局部变量会回收,优化内存使用 System.out.println(it2.next()); }
取出动作不足以用一个函数体现,封装成对象;取出动作和方式不一样 取出类在集合内部(内部类) 取出方式定义在集合的内部,这样取出方式就可以直接访问集合内容的元素。 那么取出方式就被定义成了内部类。 而每一个容器的数据结构不同,所以取出的动作细节也不一样。但是都有共性内容判断和取出,那么可以将这些共性抽取。 这些内部类都符合一个规则,该规则就是Iterator,对外提供的方法iterator();
List集合共性方法 特有方法:凡是可以操作角标的方法都是该体系特有的方法。 增: add(index,element); addAll(index,Collection); 删: remove(index); 改: set(index,element); 查: get(index); subList(from,to); listIterator(); List集合特有的迭代器,ListIterator是Iterator的子接口。 在迭代时,不可以通过集合对象的方法操作集合中的元素。因为会发生ConcurrentModificationException异常。 所以,在迭代时,只能用迭代器的方法操作元素,可是Iterator方法是有限的,只能对元素进行判断、取出、删除的操作。 如果想要其他的操作如添加、修改等,就需要使用其子接口,ListIterator。 该接口只能通过List集合的listIterator方法获取。
List集合具体对象的方法 ArrayList 底层的数据结构是数组结构,查询修改速度快,但是增删稍慢。线程不同步默认长度是10,超过15%增长新建数据,并将原数组copy过来。 LinkedList 底层使用的是链表数据结构,查询修改慢,增删快。 Vector(集合框架之前) 底层是数组数据结构,线程同步
Vector中的枚举 枚举就是Vector特有的取值方式 和迭代器很像 其实枚举和迭代是一样的 因为枚举的名称以及方法名称都过长,被取代了。 elements(); hasElements(); nextElement();
LinkedList 特有方法: addFirst(); addLast();offerLast(); getFirst();peekFirst(); getLast();获取元素但不删除元素 removeFirst();获取元素,但元素被删除,若集合无元素会出现NoSuchElementException pollFirst();若集合无元素返回null。 removeLast(); while(!link.isEmpty()){//不遍历的情况下取出所有元素 removeFirst(); }
boolean contains(Object o) 如果此 collection 包含指定的元素,则返回
true
。更确切地讲,当且仅当此
collection 至少包含一个满足(o==null ? e==null : o.equals(e))
的元素 e
时,返回 true
。
List集合判断元素是否相同,依据是元素的equals方法;remove也调用了equals方法。
Set集合 元素是无序(存入和取出的顺序不一定一致),元素不可以重复 Set集合的功能和Collection是一致的 |--HashSet:底层数据结构是哈希表,线程非同步 |--TreeSet:底层数据结构是二叉树 HashSet Hash表中hash值相同时,位置是否一样,判断是同一对象 取出:迭代 唯一性:通过元素的两个方法,hashCode和equals来完成,如果元素的HashCode值相同,才会判断equals是否为true
判断和删除的依据 依赖的方法是HashCode和equals
TreeSet 可以对Set集合中的元素进行排序,当主要条件相同时,一定要判断次要条件 保证元素唯一性的依据是compareTo方法return 0; TreeSet排序的第一种方式:让元素自身具备比较性,元素需要实现Comparable接口,覆盖compareTo方法,这种方式也称为元素的自然顺序,或者叫做默认顺序。 二叉树
相关文章
- 暂无相关文章
用户点评