容器
Java提供的一套容器类,其中基本类型是List、Set(集)、Queue和Map(映射),这些对象类型也称之为集合类。
jdk1.5泛型(就是一个<>间括号里面加上要装的类型的名字,不用强制转换了)只要后面在API中哪个类后面跟着,就可以使用泛型,所谓泛型,就是通过参数转化类型来实现在同一份代码上操作多种数据类型。
泛型编程是一种编程范式,实现更为灵活的复用。泛型赋予了代码更强的类型安全,更好的复用,更高的效率,更清晰的约束。
用法如下:
import java.util.List;
public class Testf {
public static void main(String[] args) {
Collection<String > n=new Collection<>();
n.set("嘿嘿嘿",0);
String a=n.get(0);
System.out.println(a);
List list;
}
}
class Collection<E>{
Object[] o=new Object[5];
public void set(E e,int i){
o[i]=e;
}
public E get(int i){
return (E) o[i];
}
}

列表( List ):
– 对象按索引存储
– 可以存储重复元素
主要实现类
1、ArrayList:动态数组
•遍历比较快,插入删除偏慢
2、LinkedList:链表
•双向链表,遍历速度慢,快速插入删除
相关用法如下:
public class Testl {
public static void main(String[] args) {
Collection<String> a=new ArrayList<>();
System.out.println(a.size());
System.out.println(a.isEmpty());
a.add("嘟嘟嘟");
a.add("哒哒哒");
System.out.println(a);
System.out.println(a.size());
System.out.println(a.contains("大大大"));
Object[] o=a.toArray();
System.out.println(o);
a.remove("哒哒哒");
System.out.println(a);
a.clear();
System.out.println(a.size());
}
}

public class Testl1 {
public static void main(String[] args) {
test3();
}
public static void test1(){ }
public static void test2(){
List<String> list1=new ArrayList<>();
list1.add("hhh");
list1.add("fff");
list1.add("sss");
List<String> list2=new ArrayList<>();
list2.add("fff");
list2.add("aaa");
list2.add("ttt");
System.out.println("list1:"+list1);
list1.addAll(list2);
System.out.println("list1:"+list1);
list1.removeAll(list2);
System.out.println("list1:"+list1);
list1.retainAll(list2);
System.out.println("list1:"+list1);
}
public static void test3(){
List<String> list=new ArrayList<>();
list.add("aa");
list.add("bb");
list.add("cc");
list.add("dd");
System.out.println(list);
list.add(3,"hhh");
System.out.println(list);
list.remove(3);
list.set(3,"hh");//替换
System.out.println(list);
System.out.println(list.get(3));
list.add("cc");
list.add("dd");
list.add("bb");
System.out.println(list);
System.out.println(list.indexOf("bb"));
System.out.println(list.lastIndexOf("bb"));
}
}

手工实现ArrayList的相关操作:
最终版,含有扩容,移除,get查询索引越界等相关处理方法。
public class TestS3<E> {
private Object[] e;
private int size;
private static final int DEFALT_CAPACITY = 10;
public TestS3() {
e = new Object[DEFALT_CAPACITY];
}
public TestS3(int c) {
if (c<0){
throw new RuntimeException("容器容量不能为负数");
}else if (c==0){
e=new Object[DEFALT_CAPACITY];
}else{
e=new Object[c];
}
e = new Object[c];
}
public int size(){
return size;
}
public boolean is(){
return size==0?true:false;
}
//什么时候扩容??
public void add(E el) {
if (size==e.length){
//扩容
Object[] newA=new Object[e.length+(e.length>>1)];
System.arraycopy(e,0,newA,0,e.length);
e=newA;
}
e[size++] = el;
}
public E get(int in){
check(in);
return (E)e[in];
}
public void set(E e1,int in){
check(in);
e[in]=e1;
}
public void check(int in){
//索引合法判断【0,size)
if(in<0||in>size-1){
throw new RuntimeException("索引不合法"+in);
}
}
public void remove(E el){
//el将它和所有元素进行比较,获得一个比较为true返回
for (int i=0;i<size;i++){
if(el.equals(get(i))){
//移除
remove(i);
}
}
}
public void remove(int in){
int n=e.length-in-1;
if (n>0) {
System.arraycopy(e, in + 1, e, in, n);
}
e[--size]=null;
}
@Override
public String toString() {
StringBuilder s = new StringBuilder();
s.append("[");
for (int i = 0; i < size; i++) {
s.append(e[i] + ",");
}
s.setCharAt(s.length() - 1, ']');
return s.toString();
}
public static void main(String[] args) {
TestS3 s = new TestS3(20);
for (int i=0;i<40;i++){
s.add("aa"+i);
}
s.set("eee",10);
System.out.println(s);
System.out.println(s.get(39));
s.remove(5);
s.remove("aa3");
System.out.println(s);
System.out.println(s.size);
System.out.println(s.is());
}
}
相关方法的解释:
–add(E e):将指定的元素添加到此列表的尾部
–add(int index, E element):将指定的元素插入此列表中的指定的index位置
–remove(int index):移除此列表中指定的index位置上的元素
–remove(E e):移除此列表中指定元素
–get(int index):返回此列表中指定的index位置上的元素
–set(int index, E element):用指定的元素替代此列表中指定的index位置上的元素
–size():返回此列表中的元素数
–isEmpty():判断是否为空
–contains(E e):判断是否包含元素e

本文深入解析Java集合框架,包括List、Set、Queue和Map的基本概念与用法,重点讲解ArrayList和LinkedList的特点及适用场景,同时介绍泛型编程的灵活性与优势。
844

被折叠的 条评论
为什么被折叠?



