Java中常用容器类

1.什么是容器?

1.专门用来存放其它类的对象的一种类,这种类就叫做容器,或者就叫做集合,集合就是将若干性质相同或相近的类对象组合在一起而形成的一个整体。

2.在Java容器中一共定义了两种集合, 顶层接口分别是Collection和Map。但是这两个接口都不能直接被实现使用,分别代表两种不同类型的容器。

3.Collection是独立元素的序列,这些元素都服从一条或多条规则。List、Set以及Queue都是Collection的一种,List必须按照顺序保存元素,而Set不能有重复元素,Queue需要按照排队规则来确定对象的顺序。

4.Map是键值对类型,一组成对的值键对对象(key-value型)key-value型,允许用键来查找值。ArrayList允许我们用数字来查找值,它是将数字和对象联系在一起。而Map允许我们使用一个对象来查找某个对象,它也被称为关联数组。或者叫做字典。

5.继承关系类图Java中常用容器类_第1张图片其中淡绿色的表示接口,红色的表示我们经常使用的类。

2.容器与数组间的区别与联系?

1、数组的长度难以扩充,数据的类型必须相同。
2、容器不是数组,不能通过下标的方式访问容器中的元素.
3、数组的所有功能通过Arraylist容器都可以实现,只是实现的方式不同。
4、如果非要将容器当做一个数组来使用,通过toArray方法返回的就是一个数组。

3.怎么使用容器?

boolean add(Object obj):向容器中添加指定的元素
Iterator iterator():返回能够遍历当前集合中所有元素的迭代器
Object[] toArray():返回包含此容器中所有元素的数组。
Object get(int index):获取下标为index的那个元素
Object remove(int index):删除下标为index的那个元素
Object set(int index,Object element):将下标为index的那个元素置为element
Object add(int index,Object element):在下标为index的位置添加一个对象element
Object put(Object key,Object value):向容器中添加指定的元素
Object get(Object key):获取关键字为key的那个对象
int size():返回容器中的元素数

4.Collection接口的子接口

1.List接口的实现类(有序可重复)
ArrayList:相当于顺式存储,它包装了一个数组 Object[],当实例化一个ArrayList时,一个数组也被实例化,当向ArrayList中添加对象时,数组的大小也相应的改变,即容量可变的动态数组。

常用方法
get(int index) 不需要遍历数组,速度快;
iterator() 方法中调用了get(int index),所以速度也快
set(int index, E e) 不需要遍历数组,速度快
add(Object o) 方法需要考虑扩容与数组复制问题,速度慢
remove(Object o) 需要遍历数组,并复制数组元素,速度慢
remove(int index) 不需要遍历数组,需要复制数组元素,但不常用
contain(E) 需要遍历数组
clear(): 清空表

LinkedList:相当于链式存储,它是通过节点直接彼此连接来实现的。每一个节点都包含前一个节点的引用,后一个节点的引用和节点存储的值。当一个新节点插入时,只需要修改其中保持先后关系的节点的引用即可,当删除记录时也一样。
Vector:大多数操作和ArrayList类相同,区别之处在于Vector类是线程同步的。
Stack:继承自Vector,实现一个后进先出/先进后出的堆栈。

2.Set接口的实现类(不可重复)
HashSet:实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。
TreeSet:有序的Set集合,基于TreeMap实现的,它的作用是提供有序的Set集合,TreeSet中的元素支持2种排序方式:自然排序或者根据创建TreeSet 时提供的 Comparator 进行排序。这取决于使用的构造方法。不支持快速随机遍历,只能通过迭代器进行遍历。

5.Map接口下的实现类

HashMap

①HashMap容器特点:以键值对的形式来保存数据(key:value)
②键不可以重复,重复时,后者键值会覆盖前者
③键和值支持的数据类型:引用类型
④HashMap容器最常用的方法:
添加数据:put()
取值:get()
移除:remove()
获取所有的键:Keyset(),返回的是set的类型,必须使用Set去接收
获取所有的值:values(),返回的是Collection的类型,必须使用Collection去接收
获取键的个数:size()
是否包含某个键:containsKey()
是否包含某个值:containsValue()
⑤取出字典里面的值:

public class HashMapTest02 {
	public static void main(String[] agrs) {
		HashMap<String,String> hashmap = new HashMap<String,String>();
		hashmap.put("name", "Tom");
		hashmap.put("age","18");
		hashmap.put("height","175.00");
		//取出字典里面所有的值
		//先获取出所有的key,再遍历key去取值
		Set<String> keys = hashmap.keySet();
		System.out.println(keys);
		for(String key:keys) {
			System.out.println(key+"=="+hashmap.get(key));
		};
	}
}

TreeMap:能比较元素大小的Map集合,底层使用了红黑树来实现,会对传入的 key 进行了大小排序。其中,可以使用元素的自然顺序,也可以使用集合中自定义的比较器来进行排序。

6.如何遍历容器中的元素?

1.迭代器Iterator是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,但只能单向移动。
2.使用方法:

(1)iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。

(2) 使用next()获得序列中的下一个元素。

(3) 使用hasNext()检查序列中是否还有元素。

(4) 使用remove()将迭代器新返回的元素删除

3.代码举例

list l = new ArrayList();
l.add("aa");
l.add("bb");
l.add("cc");
Iterator iter = l.iterator();
while(iter.hasNext()){
  String str = (String) iter.next();
  System.out.println(str);
 }

7.如何利用比较器构造有序容器?

1.自然排序:使用Comparable接口

1.像String、包装类等实现了Comparable接口,重写了compareTo(obj)方法,给出了比较两个对象大小的方式。
2.像String、包装类重写compareTo()方法以后,进行了从小到大的排列
3. 重写compareTo(obj)的规则:
如果当前对象this大于形参对象obj,则返回正整数,
如果当前对象this小于形参对象obj,则返回负整数,
如果当前对象this等于形参对象obj,则返回零。
4. 对于自定义类来说,如果需要排序,我们可以让自定义类实现Comparable接口,重写compareTo(obj)方法。在compareTo(obj)方法中指明如何排序

2.定制排序:使用Comparator接口

重写compare(Object o1,Object o2)方法,比较o1和o2的大小: 如果方法返回正整数,则表示o1大于o2;
如果返回0,表示相等; 返回负整数,表示o1小于o2。

 private static void getComparator(ArrayList<Student> list) {
        //排序 :说明必须要实现这个接口Comparable
        //可以使用参数比较器来实现
        Collections.sort(list, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                //asc
//                return o1.getNumber()-o2.getNumber();
                //desc
                return o2.getNumber()-o1.getNumber();
            }
        });
    }

你可能感兴趣的:(学习,java,容器,开发语言)