一、常量、数组、集合
常量:数据类型固定,存放个数只能有一个。
数组:数组类型固定,大小限定,存放个数可以是多个。
集合:集合相当于一个容器,用来存放一组对象的。存储数据量不限制,可以根据实际的需要进行扩展,是弹性存储空间。能存储任何类型的对象,存储数据的包容性更强。
二、Java中集合框架层次结构
1、Colection
相当于数组,以值(value)进行存储。
2、Map
以键值(key-value)对进行存储,是映射存储。
3、Iterator
迭代器,相当于用for进行循环访问。
三、Colection接口
(一)Colention概念
1、一个Colection中可以放不同类型的数据。
2、一组称为元素的对象。
3、Colection是Set接口和List接口的父类。
4、是否有特定的顺序以及是否允许重复,取决于它的实现
5、Colection是抽象方法,不能直接调用,要用Colention都要用其实现类去干事情。
(1)Set:无序集合,不允许重复。
无序集合:数据放入的顺序和实际存储的数据位置不完全一致,不保证数据恒久不变,即使是相同的代码,在执行一次其存放的顺序又改变。
不允许重复:不包含两个内容相等的对象,即e1.equals(e2);“==”相等一定equals相等;最多只包含一个null元素。
HashSet–实现类
(2)List:有序集合,允许重复。
ArrayList–实现类、LinkedList–实现类
(二)、Collection常用方法
1、增加数据
boolean add(Object ) :在集合中加入一个对象,成功时返回true。
2、删除数据
boolean remove(Object ):从集合中删除对象
3、查询数据
int size( ):求集合中有几个元素
boolean isEmpty( ):判断集合是否为空
boolean contains(Object ):判断集合是否包含该对象
Iterator iterator( ):迭代访问。相当于for循环的作用
(三)、Set接口
1、HashSet–HashSet的特征在于其内部对象的散列存取,即采用哈希技术。
2、TreeSet–TreeSet存入的顺序跟存储的顺序不同,但是存储是按照排序存储的。只接收字符串形式的输入。
3、TreeSet支持简单的字母、数字排序,但是中文就不行啦。
4、Set接口是通过HashSet实现类、TreeSet实现类去干事情。
import java.util.HashSet;
import java.util.TreeSet;
/*
* 验证Set的无序集合、不允许重复
*/
public class SetTest {
public static void main(String[] args) {
/*
* HashSet
* 元素是无序的,不允许重复的
* 按照HashCode()来存储
*/
//创建HashSet实例化对象
HashSet s=new HashSet<String>();
//利用add()方法进行赋值
s.add(10);
s.add(20);
s.add(20);
s.add(4.0f);
s.add("HelloWorld");
s.add("HelloWorld");
//打印输出
System.out.println(s);
/*
* TreeSet
* 元素是无序的,不允许重复
* 按照排序树来存储,且要求个元素间的类型是可比较的
*/
TreeSet t=new TreeSet();
t.add("10");
t.add("20");
t.add("20");
t.add("4.0");
t.add("HelloWorld");
t.add("HelloWorld");
System.out.println(t);
}
}
(四)、List接口
1、List接口是用来包含一组有序有重复的对象的。
2、List中的元素都对应一个整数型的序号,记载其在容器中的位置,可以根据序号存取容器中的元素。
3、List有两种主要的集合实现类:
(1)ArrayList
(2)LinkedList
ArrayList
(一)、ArrayList概念
1、ArrayList是线性顺序存储的,是一种线性表。
2、ArrayList的特性和数组很接近,数组大小是不变的。而ArrayList的大小是可以动态改变的。
(二)、ArrayList的构造方法
// 常用的
1、ArrayList 变量名=new ArrayList();
//直接指定容量的大小,开发中一般不会这样做,这样做跟数组没有任何区别。
2、ArrayList 变量名=new ArrayList(int capacity);
//把一个集合作为一个元素
3、ArrayList 变量名=new ArrayList(Collection c);
(三)、ArrayList的常用方法
1、增加数据
void add(Object element ):在列表中添加一个元素
void add(int index,Object element ) :在列表中的index位置添加一个元素
import java.util.ArrayList;
/*
*增加数据 boolean add(Object)
*/
public class SetTest {
public static void main(String[] args) {
ArrayList arr=new ArrayList();
//在列表中添加一个元素
arr.add(40);
arr.add(80);
//在列表中的index为1的位置添加一个元素
arr.add(1, 60);
System.out.println(arr);
}
}
2、删除数据
Object remove(int index ):移除列表中指定位置的元素
import java.util.ArrayList;
/*
*增加数据 boolean add(Object)
*/
public class SetTest {
public static void main(String[] args) {
ArrayList arr=new ArrayList();
//在列表中添加一个元素
arr.add(40);
arr.add(80);
//在列表中的index为1的位置添加一个元素
arr.add(1, 60);
//移除列表中index为1的元素
arr.remove(1);
System.out.println(arr);
}
}
3、查询数据
(1)Object get(int index):返回列表中指定位置的元素
import java.util.ArrayList;
/*
*增加数据 boolean add(Object)
*/
public class SetTest {
public static void main(String[] args) {
ArrayList arr=new ArrayList();
//在列表中添加一个元素
arr.add(40);
arr.add(80);
//在列表中的index为1的位置添加一个元素
arr.add(1, 60);
System.out.println(arr);
//返回列表中index为0位置的元素
System.out.println(arr.get(0));
}
}
(2)int indexOf(Object o):在列表中查询元素的索引值,如果不存在返回-1
import java.util.ArrayList;
/*
*增加数据 boolean add(Object)
*/
public class SetTest {
public static void main(String[] args) {
ArrayList arr=new ArrayList();
//在列表中添加一个元素
arr.add(40);
arr.add(80);
//在列表中的index为1的位置添加一个元素
arr.add(1, 60);
System.out.println(arr);
//在list中查询元素的索引值,如果不存在,返回-1
System.out.println(arr.indexOf(40));
System.out.println(arr.indexOf(60));
}
}
(3)int lastIndexOf(Object o)
List中如果存在多个重复元素,indexOf()方法返回第一个匹配元素的index。lastIndexOf( )是返回最后一个匹配元素的index。
import java.util.ArrayList;
/*
*增加数据 boolean add(Object)
*/
public class SetTest {
public static void main(String[] args) {
ArrayList arr=new ArrayList();
//在列表中添加一个元素
arr.add(40);
arr.add(80);
arr.add(40);
System.out.println(arr);
//indexOf()方法返回第一个匹配元素的index
System.out.println(arr.indexOf(40));
//LastIndexOf()方法返回匹配元素的最后一个index
System.out.println(arr.lastIndexOf(40));
}
}
(4)ListIterator listIterator()
返回列表中元素的列表迭代器。
import java.util.ArrayList;
/*
*增加数据 boolean add(Object)
*/
public class SetTest {
public static void main(String[] args) {
ArrayList arr=new ArrayList();
//在列表中添加一个元素
arr.add(40);
arr.add(80);
arr.add(40);
System.out.println(arr);
//利用迭代器输出列表中的元素
System.out.println(arr.listIterator());
}
}
LinkedList
(一)概念
1、likedList是数据结构中链表的java实现。
2、相对于List来说,LinkedList最主要的功能方面的增强是可以在List的头部和尾部添加、删除、取得元素,直接提供了这些方法的实现。所以它可以非常方便的实现我们数据结构中的常见的Stack(栈)
queue(对列)等。
3、LinkedList与ArrayList的唯一区别就是LinkedList对首尾操作比较方便,别的和ArrayList无差别。
(二)构造方法
//常用
LinkedList 变量名=new LinkedList();
//把一个集合作为一个元素
LinkedList 变量名=new LinkedList(Collention c);
(三)常用方法
1、将给定元素插入此列表的开头/结尾
void addFirst(Object o) //将给定元素插入此列表的开头
void addLast(Object o) //将给定元素插入此列表的结尾处
import java.util.LinkedList;
/*
*void addFirst(Object o) 将给定元素插入此列表的开头
*void addLast(Object o) 将给定元素插入此列表的结尾处
*
*/
public class TestLinkedList {
public static void main(String[] args) {
//创建对象
LinkedList link=new LinkedList();
//添加元素
link.add(40);
link.add(80);
link.add(40);
//打印所有元素
System.out.println("打印所有元素:"+link);
//将“10”元素插到link列表的开头
link.addFirst(10);
//将“200”元素插到Link列表的结尾
link.addLast(200);
//打印更新后的所有元素
System.out.println("打印更新后的所有元素:"+link);
}
}
2、返回次列表的第一个元素/最后一个元素
Object getFirst()//返回次列表的第一个元素
Object getLast() //返回次列表的最后一个元素
import java.util.LinkedList;
/*
*Object getFirst()//返回次列表的第一个元素
*Object getLast() //返回次列表的最后一个元素
*/
public class TestLinkedList {
public static void main(String[] args) {
//创建对象
LinkedList link=new LinkedList();
//添加元素
link.add(40);
link.add(80);
link.add(120);
//打印所有元素
System.out.println("打印所有元素:"+link);
//返回此列表的第一个元素,并通过println()方法打印出来
System.out.println("返回此列表的第一个元素:"+link.getFirst());
//返回次列表的最后一个元素,并通过println()方法打印出来
System.out.println("返回次列表的最后一个元素:"+link.getLast());
}
}
3、移除并返回此列表的第一个元素/最后一个元素
Object removeFirst()移除并返回此列表的第一个元素
Object removeLast()移除并返回次列表的最后一个元素
import java.util.LinkedList;
/*
*Object getFirst()//返回次列表的第一个元素
*Object getLast() //返回次列表的最后一个元素
*/
public class TestLinkedList {
public static void main(String[] args) {
//创建对象
LinkedList link=new LinkedList();
//添加元素
link.add(40);
link.add(80);
link.add(70);
link.add(120);
//打印所有元素
System.out.println("打印所有元素:"+link);
//移除并返回次列表的第一个元素
System.out.println("移除并返回次列表的第一个元素:"+link.removeFirst());
//移除并返回次列表的最后一个元素
System.out.println("移除并返回次列表的最后一个元素:"+link.removeLast());
//打印移除后的列表所有元素
System.out.println("打印移除后的列表所有元素:"+link);
}
}
ArrayList与linkList的比较
1、存储结构
ArrayList是线性顺序存储;
LinkList对象间彼此串连起来的一个链表。
2、操作性能
ArrayList适合随机查询的场合;
LinkList元素的插入和删除操作性高。
3、从功能上,Linkling要多些