集合
- 内存层面需要针对于多个数据进行存储。此时,可以考虑的容器有,数组、集合类
- 数组存储多个数据方面的特点:
>数组一旦初始化,其长度就是确定的。
>数组中的多个元素是依次紧密排列的,有序的,可重复的,
>(优点)数组一旦初始化完成,其元素的类型就是确定的。不是此类型的元素,就不能添加到此数组中。
>(优点)元素的类型既可以是基本数据类型,也可以是引用数据类型
数组存储多个数据方面的弊端:
>数组一旦初始化,其长度就不可变了
>数组中存储数据特点的单一性。对于无序的、不可重复的场景的多个数据就无能为力了。
>数组中可用的方法、属性都极少。具体的需求,都需要自己来组织相关的代码逻辑。
>针对于数组中元素的删除、插入操作,性能较差。
- Java集合框架体系 (java.util包下)
java.util.Collection:存储一个一个的数据
l-----子接口:List:存储有序的、可重复的数据
|----HashSet(主要实现类)、LinkedHashSet、TreeSet
|-----子接口:Set:储存无序的、不可重复的数据
|-----HashSet(主要实现类)、LinkedHashSet、TreeSet
Java.util.Map:存储一对一对的数据(key-value键值对,(x1,y1)、(x2,y2)-->y=f(x),类似于高中的函数)
|----HashMap(主要实现类)、LinkedHashMap、TreeMap、Hashtable、Properties
- 学习的程度把握:
层次1:针对具体特点的多个数据,知道选择相应的适合的接口的主要实现类,会实例化,会调用常用的方法。
层次2:区分接口中不同的实现类的区别。
层次3:1.针对常见的实现类,需要熟悉底层源码
- 熟悉常见的数据结构
- 常用方法: (Collection中定义了15个抽象方法。这些方法需要大家熟悉!)
- Add(Object obj);
- addAll(Collection coll);
- Clear();
- isEmpty();
- Size();
- Contains(Object obj);
- ContainsAll(Collection coll)
- retainAll(Collection coll)
- Remove(Object obj)
- RemoveAll(COllection coll)
- hashCode()
- Equals()
- toArray()
*****************
- 集合与数组的相互转换:
集合---->数组
Object[] arr = coll.toArray();//返回包含当前数组集合中所有元素的数组
数组--->集合调用Arrays.asList()静态方法传入数组,或元素
Collection list = Arrays.asList(arr);
System.out.println(Arrays.asList(list));
- 向CoLLection中添加元素的要求
- 要求元素所属的类一定要重写equals();
原因:
因为ColLection中的相关方法在使用时,要调用元素所在类的equals()。
实例代码:
/**
* ClassName:CollectionTest
* Description:
* 测试Collection中方法的使用
* add();向当前集合增加元素
* size():获取集合中元素的个数
* isEmpty():判断当前集合是否是空;
* contains(Object obj)判断当前集合是否包含传入元素
* containsAll(Collection coll)判断当前集合是否包含传入集合
* equals(Object obj)判断当前集合于obj是否相等
*/
public class CollectionTest {
public static void main(String[] args) {
Collection coll = new ArrayList();
//add();向当前集合增加元素
coll.add("AAA");
coll.add(128);//自动装箱了
coll.add("学习JAVA");
coll.add(new Person("Tom",12));
System.out.println(coll);
Collection coll1 = new ArrayList();
coll1.add("BB");
coll1.add(456);
System.out.println(coll.size());
coll.addAll(coll1);
System.out.println(coll);
//size():获取集合中元素的个数
System.out.println(coll.size());
//isEmpty():判断当前集合是否是空;
System.out.println(coll.isEmpty());
//contains(Object obj)判断当前集合是否包含传入元素
System.out.println(coll.contains("AA"));
System.out.println(coll.contains(128));
System.out.println(coll.contains(new String("学习JAVA")));
System.out.println(coll.contains(new Person("Tom",12)));
//containsAll(Collection coll)判断当前集合是否包含传入集合
Collection coll2 =new ArrayList();
//add()
coll2.add("AAA");
coll2.add(128);
System.out.println(coll.containsAll(coll2));
//equals(Object obj)判断当前集合于obj是否相等
System.out.println(coll.equals(coll2));
}
}
package TEST0723;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
/**
* Object[] arr = coll.toArray()//返回包含当前数组集合中所有元素的数组
* hashCode()获取对象的哈希值
* iterator()返回迭代器对象,用于集合遍历
* 静态方法传入数组,或元素转换成数组
* Arrays.asList()
* Collection list = Arrays.asList(arr);//静态方法传入数组,或元素转换成数组
*/
public class CollectionTest3 {
public static void main(String[] args) {
Collection coll = new ArrayList();
//add();向当前集合增加元素
coll.add("AAA");
coll.add(128);//自动装箱了
coll.add("学习JAVA");
coll.add(new Person("Tom",12));
coll.add("BBB");
//集合-->数组
Object[] arr = coll.toArray();//返回包含当前数组集合中所有元素的数组
System.out.println(Arrays.toString(arr));
//hashCode()获取对象的哈希值
System.out.println(coll.hashCode());//获取对象的哈希值
//iterator()返回迭代器对象,用于集合遍历
//静态方法传入数组,或元素转换成数组
//Arrays.asList()
Collection list = Arrays.asList(arr);//静态方法传入数组,或元素转换成数组
System.out.println(Arrays.asList(list));
}
}