java集合框架详解
1.java集合框架概述 java SE包含了由一组类和接口组成的java集合框架(java Collection Framework,简称JCF),其主要功能是用来将存储的数据以某种结构组织,并以特定的方式来访问这些数据,其目标是提供一个处理对象集合的通用框架,减少程序员处理不同对象集合时的编码量。 集合类中的一些区别,除了它们是否支持重复元素操作外,还包括元素是否有顺序,以及是否允许添加null元素。java集合框架中根据这三个区别,将对象的存储方式分为三种类型,分别是:
为支持对象的排序和遍历访问操作,java集合框架中又提供了几个接口:
2.Collection接口和Iterator接口 Collection接口中定义了Collection对象共有的一些基本方法
Iterator接口是一种用于遍历集合的接口。
1.List接口 List接口继承自Collection接口,它有如下特点:
List接口最常用的实现类是ArrayList类和LinkedList类。 1).ArrayList 程序实例: package lei; import java.util.ArrayList; import java.util.List; public class Test { public static void main(String[] args) { List list = new ArrayList<>(); list.add(1); list.add("zhangsan"); list.add(false); list.add('a'); list.add(0,"lisi"); list.add(1); list.remove(1); list.remove(2); list.set(0,"wangwu"); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } } Object类定义的equals()方法只有在传递给该方法的对象与调用该方法的对象是同一对象的时候,才会返回true。可以通过重写equals()方法来把具有相同状态的两个对象被看做是同一对象。 2).LinkedList
程序实例: package lei; import java.util.LinkedList; import java.util.List; public class Test2 { public static void main(String[] args) { LinkedList l=new LinkedList<>(); l.add("zhangsan"); l.add("lisi"); l.addFirst(1); l.addLast(4); System.out.println(l.getFirst()); System.out.println(l.getLast()); l.removeFirst(); l.removeLast(); for (int i = 0; i < l.size(); i++) { System.out.println(l.get(i)); } } } LinkedList与ArrayList的选择 如果列表需要快速存取,但不经常进行元素的插入和删除操作,那么选择ArrayList会好一些;如果需要对;列表进行频繁的插入和删除操作,那么就应该选择LinkedList。 2.set接口 set接口继承自Collectiion接口,同时也继承了Collection接口的全部方法。set接口有以下特点:
实现Set接口最常用的是HashSet类和TreeSet类。 1).Hashset Hashset类是基于哈希算法的Set接口实现,它主要有如下几个特点:
如果我们编写的类重新定义了equals方法,那么这个类也必须重新定义hashCode()方法,并且保证当两个对象用equals方法比较结果为true时,这两个对象的hashCode()方法的返回值相等。 程序实例: package lei; import java.util.HashSet; import java.util.Set; public class Test4 { public static void main(String[] args) { Set<String> set=new HashSet<String>(); set.add("zhangsan"); set.add("lisi"); for(String s:set){ System.out.println(s); } } } 2).TreeSet TreeSet类不仅实现类Set接口,还实现了SortedSet接口,从而保证集合中的对象按照一定的顺序排序。当向TreeSet集合中添加一个对象时,会把它插入到有序的对象序列中,但是这种排序并不是按照对象添加的顺序排序,而是按照一定的算法来排序。 TreeSet使用元素的自然顺序对元素进行排序,或者根据创建Set时提供的Comparator进行排序。TreeSet支持自然排序和自定义排序两种排序方式。 3.Map接口 Map(映射)接口是java集合框架中不同于Collection接口的另一个重要接口,它对应的是在一种从键(Key)到值(Value)的对应关系的集合。Map类型的对象容器里面保存着两组对象,一组对象用于保存Map里的Key,另外一组用于保存Value。Key和Value可以升级任何引用类型的数据。Key不能重复,但是Value可以重复。 1).HashMap HashMap是基于哈希算法的Map接口的实现。HashMap将它的键保存在哈希表中进行维护,键是唯一的。但是,HashMap并不保证键以特定顺序排列,特别是不保证顺序永久不变。 HashMap类实现了Map接口,从而具有Map接口的所有方法。 package day1228; import java.util.*; public class HashMapDemo { public static void main(String[] args) { // 创建一个新的HashMap Map<String,String> map = new HashMap<String,String>(); map.put("a1","xiao"); map.put("b2","xiaol"); map.put("a4","xiaosd"); map.put("b1","12a"); map.put("a3","1"); // 使用iterator遍历 键和值 System.out.println("之前的Map值是:"); Set<String> keys = map.keySet(); for (Iterator<String> i = keys.iterator(); i.hasNext();) { String key = i.next(); String value = map.get(key); System.out.println(key + "=" + value); } // 删除键为"a4"的值 System.out.println("n删除键值为a4的元素"); map.remove("a4"); // //使用iterator遍历 键和值 System.out.println("n之后的Map值:"); keys = map.keySet(); for (Iterator<String> i = keys.iterator(); i.hasNext();) { String key = i.next(); String value = map.get(key); System.out.println(key + "=" + value); } } } 2).TreeMap TreeMap类是基于红黑树算法的Map接口实现。TreeMap中键的存放方式与TreeSet相似,它将键存放在树中,键的顺序按照自然顺序或者自定义顺序两种方式排列。 程序实例: package day1228; import java.util.*; public class TreeMapDemo { public static void main(String[] args) { //创建一个新的TreeMap Map<Integer,String> map = new TreeMap<Integer,String>(); map.put(1,"one"); map.put(2,"two"); map.put(3,"three"); map.put(4,"four"); map.put(5,"five"); //使用iterator显示键和值 System.out.println("之前的map值为:"); Set<Integer> keys=map.keySet(); for(Object key:keys){ String value=map.get(key); System.out.println(key+"="+value); } //删除键为3的值 System.out.println("n删除键值为3的元素"); map.remove(3); //使用iterator显示键和值 System.out.println("n之后的值Map为:"); for(Object key:keys){ String value=map.get(key); System.out.println(key+"="+value); } } } 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持编程小技巧! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- tomcat报错:Wrapper cannot find servlet class ...问题解
- 3种方式解决iterator迭代器ConcurrentModificationExceptio
- java – 信号量类中的公平设置
- java – 使用Multimap而不是Map来发送Rest Assured Call的参
- java – 可以IntelliJ生成没有“get”前缀的getter吗?
- Java数据溢出代码详解
- JAVA 根据数据库表内容生产树结构JSON数据的实例代码
- Java hashmap最大大小为5770?
- 什么叫一致性哈希,通常用来解决什么问题?
- 详解利用Spring加载Properties配置文件