Java集合详解

Java集合详解,第1张

目录

集合框架体系

1、集合和数组的区别

2、集合分为Collection和Map两大接口

Collection

Collection集合的功能概述

    迭代器(集合独有的遍历方式)

Map

Map集合的功能概述

Map三个实现类

Collection和Map的区别

3、Collection下面有两个子接口(List和Set)

List(有序可重复)

List特有功能概述

列表迭代器

List子类

ArrayList独有的方法(模拟栈 *** 作)

Set(无序不可重复)

Set子类


容器分为两种:集合和数组。

集合框架体系

1、集合和数组的区别
  • 长度不同:
                数组长度固定;                 集合长度可变;
  • 内容不同:
                数组存储同一类型元素;                 集合存储不同类型元素;
  • 元素类型不同:
                数组可以存基本类型,也可以存引用类型;                 集合只可以存引用类型; 2、集合分为Collection和Map两大接口 Collection

Collection:存放的是单个元素;

Collection的数据结构针对元素有效。

Collection集合的功能概述
boolean add(Object obj)添加一个元素
boolean addAll(Collection c)添加一个集合的元素
void clear()清屏
boolean remove(Object o)移除一个元素
boolean removeAll(Collection c)移除整个集合元素
boolean contains(Object o)判断集合中是否包含该的元素
boolean containsAll(Collection c)判断集合中是否包含该的集合元素
boolean isEmpty()判断是否为空
int size()元素的个数 (集合没有length()方法)
boolean retainAll(Collection c)判断是否交集(示例有具体解释)
Object[] toArray()集合转数组

       示例:

		Collection collection = new ArrayList();
		
		collection.add(1);
		collection.add("djvbu");
		collection.add(true);
		
		System.out.println(collection);
		
		Collection c2 =new ArrayList();
		c2.addAll(collection);//添加整个集合
		c2.add(254);
		
		c2.clear(); //清屏
		c2.remove(1);//移除
		c2.removeAll(collection); //移除整个集合
		collection.add(999);
		c2.removeAll(collection);//移除的不只是刚开始定义的c1,还有后面添加的东西
		System.out.println(c2);
		System.out.println(collection);
		
		System.out.println(c2.contains(1));//判断是否包含指定的元素
		System.out.println(c2.containsAll(collection)); //判断c2是否完全包含collection
		
		System.out.println(c2.isEmpty());//判断是否为空
		System.out.println(!c2.isEmpty());//判断是否不为空
		
		System.out.println(c2.size());//集合长度:元素个数
		
//      判断交集,如果打印 true 表示前面的集合被修改过,被修改成两个集合的交集 
//		注意:如果两个集合没有相等的元素,也会被修改,打印true,交集为空,
//      如果俩个集合完全相等,不做出改变,会打印 false(这个判断的是有没有被修改过)
		System.out.println(c2.retainAll(collection));
		System.out.println(c2);
		
		Object[] object=c2.toArray();//集合转为数组
    迭代器(集合独有的遍历方式)
  • while循环
  • for循环
  • 不要多次使用next(如果使用的两个及以上的循环,下一个next循环的是下一个元素,若有一个next没有查询到元素,则会报空指针异常)

示例:

public class IteRator {

	public static void main(String[] args) {
//		如果声明的是Collection 不能for循环遍历(因为没有下标的概念)
		Collection collection = new ArrayList();
		collection.add(123);
		collection.add(1225);
		collection.add(1231495);
//		获取迭代器(帮忙做循环)  通过当前的集合对象,拿到它的迭代器
		Iterator iterator = collection.iterator();

//		我是谁(i)从哪来(从0开始);到哪去(10结束);怎么变化(i++)
//		for(;iterator.hasNext();) {
//			System.out.println(iterator.next());
//		}
		
//        有没有下一个元素
		while(iterator.hasNext()) {
			System.out.println(iterator.next());
		}
		
	}

}
Map

Map是成对出现的,里面存放的是键值对;

Map集合的数据结构只针对键有效,和值无关。

Map集合的功能概述

V put(K key,V value)

添加元素

(另一个功能:

如果键是第一次存储,

就直接存储元素,返回null;

如果键不是第一次存在,

就用值把以前的值替换掉,

返回以前的值)

void clear()

移除所有元素

V remove(Object key)

根据键删除元素,并把值返回

V remove(Object key) 根据键删除元素,并把值返回
boolean containsKey(Object key) 判断集合是否包含指定的键
boolean containsValue(Object value) 判断集合是否包含指定的值
boolean isEmpty() 判断集合是否为空
Set> entrySet()

获取所有集合

(不能用for循环遍历,只能for-each或者迭代器遍历)

V get(Object key) 根据键获取值
Set keySet() 获取集合中所有键的集合
Collection values() 获取集合中所有值的集合
int size() 返回集合中的键值对的对数

示例:

        //Set> entrySet()示例
        Map map =new HashMap();
		
		map.put(1001, new student("Yom", 18));
		map.put(1002, new student("Tom", 19));
		map.put(1003, new student("Amy", 17));
		map.put(1004, new student("Jack", 14));
		
//		获取键值对的集合  Entry表示一对
		Set> set= map.entrySet();
//		迭代器遍历
		Iterator> iterator = set.iterator();
		while(iterator.hasNext()) {
//			System.out.println(iterator.next());
			Map.Entry entry = iterator.next();
//			获取单个键、值
			entry.getKey();
			entry.getValue();
		}

        //Set keySet()示例
//		获取里面所有的键
		Set set =map.keySet();
		for(Integer aaa:set) {
			System.out.println(map.get(aaa));
		}

        // Collection values()示例
//		Collection  获取集合中所有的值
		Collection coll =map.values();
		for(student bb:coll) {
			System.out.println(bb);
		}
Map三个实现类
  • HashMap

        键是哈希表结构,保证键的唯一性;

  • LinkedHashMap

        Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序;

  • TreeMap

        键是红黑树结构,可以保证键的排序和唯一性

Collection和Map的区别
  • Map存储元素是成对出现的,存放的是键值对,键是唯一的,值可重复
  • Collection 存储的是单个元素
  • Map 集合的数据结构只针对键有效,和值无关
  • Collection 的数据结构针对元素有效
3、Collection下面有两个子接口(List和Set) List(有序可重复)

有序可重复,这里的有序是指插入的顺序,有下标。

List特有功能概述
void add(int index,Object element) 在指定位置添加元素
Object get(int index) 获取指定位置的元素
ListIterator listIterator() List 集合特有的迭代器
Object remove(int index) 根据下标删除元素 , 返回被删除的元素
Object set(int index,Object element) 根据下标修改元素,返回被修饰的元素
列表迭代器
  • ListIterator listIterator():List集合特有的迭代器
  • hasPrevious、previous、hasnext、Next
  • 来回遍历

示例:

	public static void main(String[] args) {
		
		List list = new ArrayList();
		
		list.add(1);
		list.add(2);
		list.add(3);
		list.add(4);
		list.add(5);
		list.add(2,6);
		
		System.out.println(list);
		Collections.sort(list);
		System.out.println(list);

		ListIterator listIterator=list.listIterator();
		
		while (listIterator.hasNext()) {//判断是否有下一个
			listIterator.next();
		}
		while (listIterator.hasPrevious()) {//判断是否有上一个
			System.out.println(listIterator.previous());
		}
		listIterator.previous();//得到上一个
		listIterator.hasPrevious();//判断是否有上一个
		listIterator.hasNext();//判断是否有下一个


		while (listIterator.hasNext()) {
			System.out.println(listIterator.next());
//			list.add(1);//这里要注意不能在集合里加东西,会出现并发修改异常
			listIterator.add(1);//可以在集合的迭代器里加
		}


//		for循环遍历
		for(int i =0;i
List子类
  • ArrayList:

        底层是数组,查询快,增删慢;线程不安全,效率高。

  • Vector:

        底层是数组,查询快,增删慢;线程安全,效率低。

  • LinkedList:

        底层是链表。查询慢,增删快;线程不安全,效率

ArrayList独有的方法(模拟栈 *** 作)

栈 *** 作:

public static void main(String[] args) {
    //栈数据结构     
    Stack stack =new Stack();
    stack.push(1);
    stack.push(2);
    stack.push(3);
    stack.push(4);
    System.out.println(stack);
    System.out.println(stack.pop());
    System.out.println(stack.pop());
    System.out.println(stack.pop());
    System.out.println(stack.pop());
}

模拟栈 *** 作:

public class Text {

    LinkedList list =new LinkedList();

    public void push(Object object) {
        list.add(object);
    }

    public Object pop() {
        return list.removeLast();
    }
}

public class LinkedListDemo {
    public static void main(String[] args) {
        Text text =new Text();
        text.push("aaa");
        text.push("bbb");
        text.push("ccc");
        text.push("ddd");
        text.push("eee");
        System.out.println(text.pop());
        System.out.println(text.pop());
        System.out.println(text.pop());
        System.out.println(text.pop());
        System.out.println(text.pop());
    }
}
Set(无序不可重复)

        无序不可重复,这里的无序是指输出的顺序和插入的顺序不一样;

        Set有自己的排列方式,不是从小到大的顺序哦。

Set子类

Set的底层是使用Map来实现的哦~

  • HashSet

        底层是哈希表,不保证顺序

  • LinkedHashSet

        底层是哈希表(保证唯一性)和链表(保证有序)

  • TreeSet

        可以排序(这里有两种排序方式:一个是自然排序排序,一个是Comparator——比较器;这里做一个了解就可以啦~过一段时间我会单独写一个详解)

我是一个刚开始学编程的小白,有什么问题希望各位大神可以帮我指出来,谢谢CSDN的大神们啦~

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/3002712.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-27
下一篇 2022-09-27

发表评论

登录后才能评论

评论列表(0条)