java 集和框架1

集合框架1

1.Java中集合框架的体系结构

      集合框架---java做好的用来管理乱七八糟的一堆数据的java类库

            集合----[乱七八糟的一堆]

            框架---做好的java类库

2.Collection接口与Map接口的区别

Collection接口

Map接口

处理单列数据的顶级接口【100  “hello”】

处理键值对数据的顶级接口【标题:页码】

可以使用Iterator迭代器接口遍历集合

没有Iterator迭代器接口

3.List接口与Set接口的区别

List接口

Set接口

有序

无序

可以有重复数据

不能有重复数据,指重复的数据算一个

4.ArrayList类和LinkedList类的用法

      ArrayList类--public class ArrayList 

      构造方法

ArrayList() 构造一个初始容量为10的空列表。

ArrayList(Collection c) 通过一个实现Collection 接口的子类/子接口对象创建一个列表

ArrayList(int initialCapacity) 构造具有指定初始容量的空列表。

package com.wangxing.arraylisttest;

import java.util.ArrayList;

public class ArrayListTest1 {
	public  static  void  main(String args[]){
		//ArrayList--类--实现了List的接口
		//ArrayList类主要处理有序的单列数据集合类
		//构造方法
		//ArrayList() 构造一个初始容量为10的空列表。 
		ArrayList list1=new ArrayList();
		//ArrayList(Collection c) 通过一个实现Collection 接口的子类/子接口对象创建一个列表
		ArrayList list2=new ArrayList(list1);
		//ArrayList(int initialCapacity) 构造具有指定初始容量的空列表。
		ArrayList list3=new ArrayList(30);

实例方法

boolean

add(Object o) 将指定的元素追加到此列表的末尾。

boolean

contains(Object o) 如果此列表包含指定的元素,则返回 true 。

Object

get(int index) 返回此列表中指定位置的元素。

int

indexOf(Object o) 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。

int

lastIndexOf(Object o) 返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。

Object 

remove(int index) 删除该列表中指定位置的元素。

boolean

remove(Object o) 从列表中删除指定元素的第一个出现(如果存在)。

Object 

set(int index, Object  element) 用指定的元素替换此列表中指定位置的元素。

int

size() 返回此列表中的元素数。

boolean

isEmpty() 如果此列表不包含元素,则返回 true 。

void

clear() 从列表中删除所有元素。

Iterator<E>

iterator() 以正确的顺序返回该列表中的元素的迭代器。

package com.wangxing.arraylisttest;

import java.util.ArrayList;

public class ArrayListTest2 {
	public  static  void  main(String args[]){
		//ArrayList的常用实例方法
		ArrayList  list1=new ArrayList();
		//boolean	add(Object o) 将指定的元素追加到此列表的末尾。 
		list1.add("hello");
		list1.add(1234);
		list1.add(true);
		list1.add(12.5);
		list1.add("world");
		list1.add("hello");
		//int	size() 返回此列表中的元素数。 
		System.out.println("size=="+list1.size());//6
		//boolean	contains(Object o) 如果此列表包含指定的元素,则返回 true 。
		String  contains=(list1.contains("helloworld"))?"存在":"不存在";
		System.out.println("contains=="+contains);
		//Object 	get(int index) 返回此列表中指定位置的元素。 
		System.out.println("get=="+list1.get(2));
		//int	indexOf(Object o) 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。
		System.out.println("indexOf=="+list1.indexOf("helloworld"));
		//int	lastIndexOf(Object o) 返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。 
		System.out.println("lastIndexOf=="+list1.lastIndexOf("hello"));
		//Object 	remove(int index) 删除该列表中指定位置的元素。 
		list1.remove(3);
		System.out.println("size=="+list1.size());//5
		//boolean	remove(Object o) 从列表中删除指定元素的第一个出现(如果存在)。
		list1.remove("hello");
		System.out.println("size=="+list1.size());//4
		System.out.println("get=="+list1.get(3));
		//Object 	set(int index, Object  element) 用指定的元素替换此列表中指定位置的元素。 
		list1.set(3,"zhangsan");
		System.out.println("get=="+list1.get(3));
		//boolean	isEmpty() 如果此列表不包含元素,则返回 true 。
		System.out.println("isEmpty=="+list1.isEmpty());
		//void	clear() 从列表中删除所有元素。
		list1.clear();
		System.out.println("isEmpty=="+list1.isEmpty());
		System.out.println("size=="+list1.size());
		/*
		Iterator<E>	iterator() 以正确的顺序返回该列表中的元素的迭代器。 
		*/
	}
}

遍历ArrayList

package com.wangxing.arraylisttest;

import java.util.ArrayList;
import java.util.Iterator;

public class ArrayListTest3 {
	public  static  void  main(String args[]){
		//ArrayList的遍历方式
		ArrayList  list1=new ArrayList(); 
		list1.add("hello");
		list1.add(1234);
		list1.add(true);
		list1.add(12.5);
		list1.add("world");
		list1.add("hello");
		//普通的for循环遍历Arraylist
		for(int i=0;i<list1.size();i++){
			//利用get方法得到指定位置上的元素
			Object obj=list1.get(i);
			System.out.println("obj=="+obj);
		}
		System.out.println("---------");
		//增强的for循环遍历Arraylist
		for(Object  obj:list1){
			System.out.println("obj=="+obj);
		}
		System.out.println("---------");
		/*
		Iterator<E>	iterator() 以正确的顺序返回该列表中的元素的迭代器。 
		//hasNext()--判断迭代器是否存在下一个元素【如果存在返回值为true】
		//next()---从迭代器中得到下一个元素的值
		*/
		Iterator  iterator=list1.iterator();
		while(iterator.hasNext()){
			Object  obj=iterator.next();
			System.out.println("obj=="+obj);
		}
	}
}

LinkedList类---public class LinkedList<E>

      构造方法

LinkedList() 构造一个空列表。

LinkedList(Collection c) 通过一个实现Collection 接口的子类/子接口对象创建一个列表

package com.wangxing.listtest1;

import java.util.ArrayList;
import java.util.LinkedList;

public class LinkedListTest1 {

	public static void main(String[] args) {
		//LinkedList类---实现了List接口
		//LinkedList类处理有序的单列数据集合类
		//构造方法
		//LinkedList() 构造一个空列表。 
		LinkedList  list1=new LinkedList();
		//LinkedList(Collection c) 通过一个实现Collection 接口的子类/子接口对象创建一个列表
		LinkedList  list2=new LinkedList(list1);
		ArrayList  arr1=new ArrayList();
		LinkedList  list3=new LinkedList(arr1);
	}

}

实例方法

boolean

add(Object o) 将指定的元素追加到此列表的末尾。

boolean

contains(Object o) 如果此列表包含指定的元素,则返回 true 。

Object

get(int index) 返回此列表中指定位置的元素。

int

indexOf(Object o) 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。

int

lastIndexOf(Object o) 返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。

Object 

remove(int index) 删除该列表中指定位置的元素。

boolean

remove(Object o) 从列表中删除指定元素的第一个出现(如果存在)。

Object 

set(int index, Object  element) 用指定的元素替换此列表中指定位置的元素。

int

size() 返回此列表中的元素数。

boolean

isEmpty() 如果此列表不包含元素,则返回 true 。

void

clear() 从列表中删除所有元素。

Iterator<E>

iterator() 以正确的顺序返回该列表中的元素的迭代器。

一组对第一个元素和最后一个元素的操作方法

void

addFirst(Object e) 在该列表开头插入指定的元素。

void

addLast(Object  e) 将指定的元素追加到此列表的末尾。

Object 

getFirst() 返回此列表中的第一个元素。

Object 

getLast() 返回此列表中的最后一个元素。

Object 

removeFirst() 从此列表中删除并返回第一个元素。

Object 

removeLast() 从此列表中删除并返回最后一个元素。

为什么LinkedList会比ArrayList多出一组对第一个元素和最后一个元素的操作方法?

       因为ArrayList是动态数组结构,他在查找第一个元素和最后一个元素的时很麻烦,而LinkedList采用的是双向链表结构,这种结构在查找第一个元素和最后一个元素的时候是最快的。就像一列火车我们眼前驶过,我们可能不知道这列火车由几节车厢组成,但是我们一定会在第一时间看清第一节与最后一节车厢位置。

       遍历LinkedList

package com.wangxing.listtest1;

import java.util.Iterator;
import java.util.LinkedList;

public class LinkedListTest3 {

	public static void main(String[] args) {
		//LinkedList的遍历方式
		LinkedList list1 = new LinkedList();
		list1.add("hello");
		list1.add(1234);
		list1.add(true);
		list1.add(12.5);
		list1.add("world");
		list1.add("hello");
		// 普通的for循环遍历LinkedList
		for (int i = 0; i < list1.size(); i++) {
			// 利用get方法得到指定位置上的元素
			Object obj = list1.get(i);
			System.out.println("obj==" + obj);
		}
		System.out.println("---------");
		// 增强的for循环遍历LinkedList
		for (Object obj : list1) {
			System.out.println("obj==" + obj);
		}
		System.out.println("---------");
		/*
		 * Iterator<E> iterator() 以正确的顺序返回该列表中的元素的迭代器。
		 * //hasNext()--判断迭代器是否存在下一个元素【如果存在返回值为true】
		 * //next()---从迭代器中得到下一个元素的值
		 */
		Iterator iterator = list1.iterator();
		while (iterator.hasNext()) {
			Object obj = iterator.next();
			System.out.println("obj==" + obj);
		}
	}

}

5.ArrayList类与LinkedList类的区别

ArrayList类

LinkedList类

动态数组结构

双向链表结构

查询快,添加删除慢

添加删除快,查询慢

没有提供对第一个元素和最后一个的操作

提供对第一个元素和最后一个的操作

适合大量查询操作

适合大量添加删除操作

有初始容量为10

没有初始容量

每次扩容后的大小为之前的1.5倍。

没有扩容机制

ArrayList类

数组

保存元素的类型没有限制

保存元素的类型有限制

保存元素的存储空间会自动扩展

数组的元素存储空间是固定

6.HashSet类和LinkedHashSet类的用法

       HashSet类--public class HashSet  此类实现Set接口   由哈希表支持

       HashSet中保存的元素是没有顺序,重复的元素算一个。

HashSet() 构造一个新的空集合; 默认初始容量(16)和负载因子(0.75)。

HashSet(Collection c) 构造一个包含指定集合中的元素的新集合。

HashSet(int initialCapacity) 构造一个新的空集合; 具有指定的初始容量和默认负载因子(0.75)。

HashSet(int initialCapacity, float loadFactor) 构造一个新的空集合; 具有指定的初始容量和指定的负载因子。

package com.wangxing.hashset;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedList;

public class HashSetTest1 {

	public static void main(String[] args) {
		//HashSet类--public class HashSet  此类实现Set接口 [无序]
		//HashSet集合中的元素也是无序,没有重复元素,重复的元素算一个
		//构造方法
		//HashSet() 构造一个新的空集合; 默认初始容量(16)和负载因子(0.75)。 
		HashSet set1=new HashSet();
		//HashSet(Collection c) 构造一个包含指定集合中的元素的新集合。 
		HashSet set2=new HashSet(set1);
		
		ArrayList list1=new ArrayList();
		HashSet set3=new HashSet(list1);
		
		LinkedList list2=new LinkedList();
		HashSet set4=new HashSet(list2);
		//HashSet(int initialCapacity) 构造一个新的空集合; 具有指定的初始容量和默认负载因子(0.75)。 
		HashSet  set5=new HashSet(30);
		//HashSet(int initialCapacity, float loadFactor) 构造一个新的空集合; 具有指定的初始容量和指定的负载因子。 
		HashSet  set6=new HashSet(30,0.5f);
	}

}

实例方法

boolean

add(Object e) 将指定的元素添加到此集合(如果尚未存在)。

void

clear() 从此集合中删除所有元素。

boolean

contains(Object o) 如果此集合包含指定的元素,则返回 true 。

boolean

isEmpty() 如果此集合不包含元素,则返回 true 。

Iterator

iterator() 返回此集合中元素的迭代器。

boolean

remove(Object o) 如果存在,则从该集合中删除指定的元素。

int

size() 返回此集合中的元素数(其基数)。

package com.wangxing.hashset;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedList;

public class HashSetTest2 {

	public static void main(String[] args) {
		//HashSet类常用的实例方法
		HashSet  set1=new HashSet();
		//boolean	add(Object e) 将指定的元素添加到此集合(如果尚未存在)。 
		set1.add("hello");
		set1.add(1234);
		set1.add(true);
		set1.add(12.5);
		set1.add("world");
		//int	size() 返回此集合中的元素数(其基数)。
		System.out.println("size=="+set1.size());
		//重复的元素算一个。
		set1.add("hello");
		System.out.println("size=="+set1.size());
		//boolean	contains(Object o) 如果此集合包含指定的元素,则返回 true 。 
		String contains=(set1.contains("helloworld"))?"存在":"不存在";
		System.out.println("contains=="+contains);
		//boolean	remove(Object o) 如果存在,则从该集合中删除指定的元素。 
		set1.remove("world");
		System.out.println("size=="+set1.size());
		//boolean	isEmpty() 如果此集合不包含元素,则返回 true 。
		System.out.println("isEmpty=="+set1.isEmpty());
		//void	clear() 从此集合中删除所有元素。 
		set1.clear();
		System.out.println("isEmpty=="+set1.isEmpty());
		/*
		Iterator	iterator() 返回此集合中元素的迭代器。 
		*/ 
	}

}

遍历HashSet

package com.wangxing.hashset;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;

public class HashSetTest3 {

	public static void main(String[] args) {
		//HashSet集合的遍历
		HashSet  set1=new HashSet();
		//boolean	add(Object e) 将指定的元素添加到此集合(如果尚未存在)。 
		set1.add("hello");
		set1.add(1234);
		set1.add(true);
		set1.add(12.5);
		set1.add("world");
		set1.add("hello");
		//普通for循环无法直接遍历HashSet集合
		//通过ArrayList(Collection c)/LinkedList(Collection c)可以将HashSet集合
		//转换成ArrayList/LinkedList集合,从而使用普通for循环遍历
		ArrayList  list1=new ArrayList(set1);
		for(int i=0;i<list1.size();i++){
			Object obj=list1.get(i);
			System.out.println("obj=="+obj);
		}
		System.out.println("—————————————");
		//增强的for循环遍历HashSet集合
		for(Object obj:set1){
			System.out.println("obj=="+obj);
		}
		System.out.println("—————————————");
		/*
		Iterator	iterator() 返回此集合中元素的迭代器。 
		*/ 
		Iterator iterator=set1.iterator();
		while(iterator.hasNext()){
			Object  obj=iterator.next();
			System.out.println("obj=="+obj);
		}
	}
}

LinkedHashSet类  

       哈希表和链表实现了Set接口,具有可预测的迭代次序。 这种实现不同于HashSet,它维持于所有条目的运行双向链表。

       因为LinkedHashSet类是HashSet类的子类,因此会从父类继承集合数据的操作方法,所以只要我们会HashSet类使用,那么LinkedHashSet类不用学也会用。

LinkedHashSet() 构造一个新的空集合; 默认初始容量(16)和负载因子(0.75)。

LinkedHashSet(Collection c) 构造一个包含指定集合中的元素的新集合。

LinkedHashSet(int initialCapacity) 构造一个新的空集合; 具有指定的初始容量和默认负载因子(0.75)。

LinkedHashSet(int initialCapacity, float loadFactor) 构造一个新的空集合; 具有指定的初始容量和指定的负载因子。

实例方法

boolean

add(Object e) 将指定的元素添加到此集合(如果尚未存在)。

void

clear() 从此集合中删除所有元素。

boolean

contains(Object o) 如果此集合包含指定的元素,则返回 true 。

boolean

isEmpty() 如果此集合不包含元素,则返回 true 。

Iterator

iterator() 返回此集合中元素的迭代器。

boolean

remove(Object o) 如果存在,则从该集合中删除指定的元素。

int

size() 返回此集合中的元素数(其基数)。

       LinkedHashSet与HashSet区别是HashSet在遍历输出的时候无序,LinkedHashSet在在遍历输出的时候按照插入顺序输出。

 

猜你喜欢

转载自blog.csdn.net/m0_49935332/article/details/111642875