import java.util.Arrays;

/*

  • 特点:

  •  1.定长
    
  •  2.数据类型相同
    
  •  3.有序数组:存储多个数据
    
  • 容器类:存储多个数据

  • 自定义容器类
    */
    public class App {
    public static void main(String[] args) {
    MyContainer my=new MyContainer();
    my.add(“爽歪歪的夏天”);
    my.add(“爽歪歪的秋天”);
    my.add(“爽歪歪的冬天”);
    my.add(“爽歪歪的春天”);

     System.out.println(my.size());//根据索引进行获取数据System.out.println(my.get(0));;System.out.println(my.get(1));;System.out.println(my.get(2));;System.out.println(my);//根据索引删除my.remove(2);System.out.println(my);
    

    }
    }

//自定义容器类 只能存储字符串类型的数据 允许根据数据|索引进行操作
class MyContainer{
private String[] arr; //内存真实存储数据的数组
private int size; //容器中数据的个数

public MyContainer() {arr=new String[0];
}
/**删除数据 remove(index)->索引 *  返回被删除的数据*/
public String remove(int index) {//备份原数组String[] temp=arr;//创建新数组arr=new String[size-1];//遍历拷贝for(int i=0;i<size;i++){if(i>=index){if(i==index){continue;}arr[i-1]=temp[i];}else{arr[i]=temp[i];}}//改变sizesize--;return temp[index];
}/** 获取方法   参数是索引  返回值是索引对应的数据*/
public String get(int index) {if(index<0 || index>=size){throw new ArrayIndexOutOfBoundsException(index+"越界了!!!");}return arr[index];
}/** 添加方法 add(String)*/
public void add(String value) {//备份原数组String[] temp=arr;//1.先给数组扩容arr=new String[size+1];  //arr指向新数组//2.把value赋值到新数组中arr[size]=value;//3.原数组中数据进行拷贝for(int i=0;i<size;i++){arr[i]=temp[i];}//4.长度改变+1size++;
}public int size(){return size;
}
@Override
public String toString() {return "MyContainer [arr=" + Arrays.toString(arr) + ", size=" + size + "]";
}

==========================================================================================

Collection 容器的父接口

  • 一些 collection 允许有重复的元素,而另一些则不允许。
  • Set子接口:无序的不可重复
  • Lis子接口:有序的可重复
  • 容器可以存储任意类型的数据
  • 只能存储引用数据类型的数据,自动装箱

==========================================================================================

/*

  • List : 接口的特点:有序可重复,有索引
  •  新增了一些根据索引操作的方法
    

*/
public class ListDemo01 {
public static void main(String[] args) {
List list=new ArrayList();
list.add(111);
list.add(222);
list.add(333);
//根据索引插入 add
list.add(1,000); //原位置的数据后移
System.out.println(list);

 //E get(int index)     返回列表中指定位置的元素。 System.out.println(list.get(0));System.out.println(list.get(1));System.out.println(list.get(2));// int indexOf(Object o) System.out.println(list.indexOf(222));//E set(int index, E element) 用指定元素替换列表中指定位置的元素(可选操作)。list.set(1, 2);System.out.println(list);//E remove(int index) 移除列表中指定位置的元素(可选操作)。 System.out.println(list.remove(2));  //以索引为主System.out.println(list);//List<E> subList(int fromIndex, int toIndex) toIndex 不包含System.out.println(list.subList(1, 2));}

}

==========================================================================================
List集合举例:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

/*

  • List集合,集合中存储漫威的英雄人物,如果有灭霸,就添加一个惊奇队长
    */
    public class ListDemo03 {
    public static void main(String[] args) {
    List list=new ArrayList();
    list.add(“钢铁侠”);
    list.add(“蜘蛛侠”);
    list.add(“灭霸”);
    list.add(“蚁人”);
    System.out.println(list);
    //1.普通for
    /for(int i=0;i<=list.size()-1;i++){
    if(“灭霸”.equals(list.get(i))){ //避免空指针异常
    list.add(“惊奇队长”);
    }
    }
    System.out.println(list);
    /

    //2.for..each
    //ConcurrentModificationException 当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。
    /*for(String d:list){if("灭霸".equals(d)){  //避免空指针异常list.add("惊奇队长");}
    }
    System.out.println(list);*///3.iterator
    //java.util.ConcurrentModificationException
    /*for(Iterator<String> it=list.iterator();it.hasNext();){if("灭霸".equals(it.next())){  //避免空指针异常list.add("惊奇队长");}
    }*///4.ListIterator<E> listIterator()   返回此列表元素的列表迭代器(按适当顺序)。
    ListIterator<String> it=list.listIterator();
    while(it.hasNext()){if("灭霸".equals(it.next())){it.add("惊奇队长");}
    }
    System.out.println(list);//boolean hasPrevious()判断是否存在上一个元素   previous()获取上一个元素
    //使用从后往前 遍历list集合
    

    }
    }

==========================================================================================

import java.util.ArrayList;
import java.util.List;

/* 最重要的容器类之一ArrayList:

  • List接口的实现类:有序可重复

  • ArrayList:

  • 底层: 数组(可变数组),数组再内存中是连续的内存空间

  • 优点: 查询,随机访问效率高

  • 缺点: 增删效率低(改变容量涉及到数组的拷贝)

  • 动态扩容:通过调用Arrays.copyOf()方法进行动态扩容,扩容后新容器的大小是原容量的1.5倍

  •  第一次添加数据初始容量为10,加载因子(0~1):1
    
  • 新增方法:使用List定义的方法

  • 线程不安全的容器类

  • Vector 向量

  • 底层实现和特点与ArrayList类似

  • 1)Vector线层安全的容器类|同步的,效率较低

  • 2)扩容原容量的2倍
    */
    public class ArrayListDemo04 {
    public static void main(String[] args) {
    ArrayList list=new ArrayList();
    Person p=new Person(“谢霆锋”,40);
    list.add(new Person(“胡歌”,35));
    list.add§;
    list.add(new Person(“宋承宪”,42));

    System.out.println(list.indexOf(p));  //1  重写equals方法比较Person对象的内容,否则比较两个对象的地址
    System.out.println(list);
    

    }
    }

class Person{
private String name;
private int age;

public Person() {// TODO Auto-generated constructor stub
}public Person(String name, int age) {super();this.name = name;this.age = age;
}public String getName() {return name;
}public void setName(String name) {this.name = name;
}public int getAge() {return age;
}public void setAge(int age) {this.age = age;
}@Override
public boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Person other = (Person) obj;if (age != other.age)return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;
}@Override
public String toString() {return "Person [name=" + name + ", age=" + age + "]";
}

}

==========================================================================================

import java.util.LinkedList;

/*

  • LinkedList:

  • 底层:双向链表实现

  • 优点:增删效率高

  • 缺点:查询或随机获取效率低

  • 新增方法:新增了一些操作与链表头和链表尾的功能(见名知意的方法使用)
    */
    public class LinkedListDemo {
    public static void main(String[] args) {
    LinkedList list=new LinkedList();
    list.add(“哈哈”);
    list.add(“呵呵”);
    list.add(“嘿嘿”);

    System.out.println(list.getFirst());
    System.out.println(list.removeLast());
    System.out.println(list);
    

    }
    }

==========================================================================================

Set:无序的不可重复的,null值只能存在一个

  • 没有新增方法,与Collection中功能相同

*遍历: 1.增强for

  • 2.迭代器
    

==========================================================================================
import java.util.HashSet;
/*

  • HashSet: 底层是有HashMap维护的
  • 底层:由哈希表结构存储(数组+链表+红黑树)
  • 优点:查询,增加,删除效率较高
  • 缺点:无序
  • 扩容:默认初始容量16,加载因子0.75 ,扩容是原容量的2倍
  • HashSet存储引用数据类型去重:需要重写hashCode()方法和equals()方法进行自定义类型去重
  •  如果不重写hashCode(),可以遇到没有equals方法这一步就医过滤掉不是相同的对象了,直接存储,不会equals方法比较
    
  •  hashCode()相同的对象有可能相同可以不相同,进一步比较equals()
    
  •  hashCode()不相同的对象肯定不相同,过滤掉一写不相同的对象,不需要进一步比较equals方法效率较高
    

*/
public class HashSetDemo {
public static void main(String[] args) {
HashSet set=new HashSet();
set.add(new Person(“范冰冰”,36));
set.add(new Person(“霍思燕”,38));
set.add(new Person(“郑爽”,27));
set.add(new Person(“郑爽”,27));
System.out.println(set);
}
}

class Person{
private String name;
private int age;

public Person() {// TODO Auto-generated constructor stub
}public Person(String name, int age) {super();this.name = name;this.age = age;
}public String getName() {return name;
}public void setName(String name) {this.name = name;
}public int getAge() {return age;
}public void setAge(int age) {this.age = age;
}@Override
public int hashCode() {final int prime = 31;int result = 1;result = prime * result + age;result = prime * result + ((name == null) ? 0 : name.hashCode());return result;
}@Override
public boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Person other = (Person) obj;if (age != other.age)return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;
}@Override
public String toString() {return "Person [name=" + name + ", age=" + age + "]";
}

}

容器类(自定义容器类,List集合,LinkedList,HashSet)小结相关推荐

  1. 14.1 常见数据结构、List集合(ArrayList、LinkedList)、Set集合(HashSet、LinkedHashSet)、可变参数方法

    目录 常见的数据结构 栈 队列 数组 链表 红黑树 二叉树binary tree List集合 List接口中常用方法 列:List接口常用方法练习 ArrayList集合 LinkedList集合 ...

  2. JavaSE基础(100) 自定义容器类(存储任意数据类型和数据个数)

    自定义容器类:可以存储任意数据类型和数据个数 /*** 自定义容器类:可以存储任意数据类型和个数* @author 郑清*/ public class MyArrayDemo {public stat ...

  3. JAVA集合Set之HashSet详解_Java基础———集合之HashSet详解

    1.HashSet简介 Set是一个继承于Collection的接口,即Set也是集合中的一种.Set是没有重复元素的集合. HashSet是Set接口典型实现,它按照Hash算法来存储集合中的元素, ...

  4. 7月20HashMap、集合、HashSet

    7月20HashMap.集合.HashSet 1.List和Set区别 List : 有序的,可重复的 * 新增了一些根据索引操作的方法 * ArrayList * Vector * LinkedLi ...

  5. 常见的数据结构:栈 队列 数组 链表 红黑树——List集合 _ HashSet集合、可变参数 collections集合 Map集合

    2021-06-07复习java 一.常见的数据结构 栈(先进后出) 队列 数组 链表 红黑树 二.List集合_介绍&常用方法 ArrayList集合 Linkedlist集合 三.Hash ...

  6. Android进阶——AIDL详解之使用远程服务AIDL实现进程间带远程回调接口和自定义Bean的较复杂通信小结(二)

    文章大纲 引言 一.远程回调AIDL接口的应用 1.封装基本的父类和一些工具类 2. 创建服务端的AIDL 2.1.定义回调AIDL接口 2.2.定义业务AIDL接口 3.实现服务端对应AIDL的带有 ...

  7. 1.4 Set集合:HashSet和TreeSet类

    Set 集合 无序的,不能包含重复的对象 Set 集合类似于一个罐子,程序可以依次把多个对象"丢进"Set 集合,而 Set 集合通常不能记住元素的添加顺序. 也就是说 Set 集 ...

  8. Java集合 LinkedList的原理及使用

    1.LinkedList的概述 2.LinkedList的常用方法 3.LinkedList的三种便利方式 4.LinkedList的总结 1.LinkedList的概述 LinkedList和Arr ...

  9. Java基础(21)asList()方法、集合嵌套、Set集合、HashSet集合、LinkedHashSet集合、TreeSet集合

    1. asList()方法 1. Arrays工具类的asList(T - t)方法的使用:将数组转化成集合 2. 传进来基本类型数组和引用类型数组的差别 public class TestDemo0 ...

最新文章

  1. 箭头函数中的this的使用
  2. 托福备考有用的心得 ——转载
  3. input发送a.jax_JAX-RS 2.0中的透明PATCH支持
  4. laravel基础课程---14、表单验证(lavarel如何进行表单验证)
  5. 2021数据技术嘉年华线上召开,万人观看,迎接国产数据库的耕获菑畬之年
  6. oracle脑裂复现,Oracle rac集群环境中的特殊问题
  7. 计算机怎么看c盘用户名,如何查看c盘的软件 如何查看电脑上安装在C盘的软件...
  8. 三角网导线平差实例_三角网条件平差计算
  9. 数据库系统概念第六版课后习题答案-第二章
  10. 如何删除07版word页眉页脚的横线
  11. Lucas-Kanade 算法原理以及应用
  12. linux 查看裸设备与lv,LINUX 如何查看裸设备
  13. 【 unity3d 】NGUI playTween与Tween动画 脚本的使用
  14. 8月24日,数据分析、区块链、产品管理、市场、运营、财务、媒体等一大波热门岗位来袭丨今夏硅谷最热门的招聘会进入倒计时...
  15. MySQL中幻读现象
  16. SCI数据库使用手册(无图版)
  17. scala类的介绍与操作02
  18. 让父母轻松享受智能生活 天猫精灵新品全测评
  19. 【转】图解:RJ45水晶头网线的做法
  20. Python爬虫下载音乐

热门文章

  1. java遮罩层_[Java教程]Jquery实现遮罩层
  2. android studio 安装程序到小米6手机
  3. CSS3 keyframe 红包动画
  4. linux下patch文件使用
  5. MySQL清空表数据
  6. php程序+打印机,php程序怎么调用打印机
  7. java正则匹配下划线_java正则表达式-匹配中文数字字母下划线
  8. GAN 生成MNIST数据集
  9. js encodeuricomponent php解码,Javascript下的urlencode编码解码方法附decodeURIComponent
  10. APP测试基本流程以及APP测试要点梳理,保证您看了不后悔!