List

List

ArrayList

//创建一个ArrayList对象
ArrayList<String> list = new ArrayList<>();
// <>泛型,里面置放类型
	list.add("琴一号");
	list.add("王伟");
	list.add(0, "胡佳");
	list.add(3, "成浩");  //add()插入 
	list.set(0, "张辽");  //set()替换
	list.remove(0);     //删除 remove("元素")或remove(角标)
	list.removeAll(i);
        //取值
	System.out.println(list.get(0));
        //定位,求长,替换
	System.out.println(list.size());
        //遍历  使用迭代器
	Iterator<String> iterator = list.iterator();
	while(iterator.hasNext()) {
		String str = iterator.next();
		System.out.println(str);
	}

总结 :ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。
ArrayList objectName =new ArrayList<>();  // 初始化
ArrayList 继承了 AbstractList ,并实现了 List 接口。
E: 泛型数据类型,用于设置 objectName 的数据类型,只能为引用数据类型。
objectName: 对象名。
ArrayLis是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。
Java ArrayList 常用方法列表如下:

方法	        描述
add()	        将元素插入到指定位置的 arraylist 中
addAll()	    添加集合中的所有元素到 arraylist 中
clear()	        删除 arraylist 中的所有元素
clone()	        复制一份 arraylist
contains()	    判断元素是否在 arraylist
get()	        通过索引值获取 arraylist 中的元素
indexOf()	    返回 arraylist 中元素的索引值
removeAll()	    删除存在于指定集合中的 arraylist 里的所有元素
remove()	    删除 arraylist 里的单个元素
size()	        返回 arraylist 里元素数量
isEmpty()	判断 arraylist 是否为空
subList()	截取部分 arraylist 的元素
set()	        替换 arraylist 中指定索引的元素
sort()	        对 arraylist 元素进行排序
toArray()	将 arraylist 转换为数组
toString()	将 arraylist 转换为字符串
ensureCapacity()	设置指定容量大小的 arraylist
lastIndexOf()	返回指定元素在 arraylist 中最后一次出现的位置
retainAll()	保留 arraylist 中在指定集合中也存在的那些元素
containsAll()	查看 arraylist 是否包含指定集合中的所有元素
trimToSize()	将 arraylist 中的容量调整为数组中的元素个数
removeRange()	删除 arraylist 中指定索引之间存在的元素
replaceAll()	将给定的操作内容替换掉数组中每一个元素
removeIf()	删除所有满足特定条件的 arraylist 元素
forEach()       遍历arraylist中每一个元素并执行特定操作

约瑟夫环

//使用ArrayList实现一个约瑟夫环,100个人,从第一个人开始报数,剔除报数为3的倍数的人,头尾相接,直到剩下一个人,打印最后是哪个人剩下


public static void main(String[] args) {
        //创建一个列表list
	ArrayList<String> list = new ArrayList<>();
	    //遍历list列表
	for (int i = 0; i < 100; i++) {
		list.add(i + 1 + "");
	}
    	//设置一个计数器count,是用来计数第几个人报数的类似角标
	int count = 1; 
	//如果列表长度等于1就跳出循环
	while (list.size() != 1) {
		Iterator<String> iterator =list.iterator();
		while (iterator.hasNext()) {
		//下一个值
		    iterator.next();
        //判断是是否是3的倍数,如果是就移除
			if (count % 3 == 0) {
				iterator.remove();
			}
			count++;
		}
	}
	//遍历打印
	for (String item : list) {
		System.out.println(item);
	}
}

包装类

    整形 : byte , short , int , long
    Byte b = new Byte((byte)111);
    Byte b2=111;
    byte b3=111;
    System.out.println(Byte.parseByte("112"));//转基础类型
    System.out.println(Byte.valueOf(b3));//转对象类型

总结 : 基础数据类型(四类八种)不能被当做泛型

        Byte.parseByte();转换成基础类型
        
        Byte.valueOf转换成对象类型
        
        Byte.BYTES;计算字节长度
        
        只有boolean没有确定的字节长度

#LinkedLsit

链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。

链表可分为单向链表和双向链表。

Java LinkedList(链表) 类似于 ArrayList,是一种常用的数据容器。

与 ArrayList 相比,LinkedList 的增加和删除对操作效率更高,而查找和修改的操作效率较低。

以下情况使用 ArrayList :
频繁访问列表中的某一个元素。
只需要在列表末尾进行添加和删除元素操作。

以下情况使用 LinkedList :
你需要通过循环迭代来访问列表中的某些元素。
需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。
LinkedList 继承了 AbstractSequentialList 类。

LinkedList 实现了 Queue 接口,可作为队列使用。

LinkedList 实现了 List 接口,可进行列表的相关操作。

LinkedList 实现了 Deque 接口,可作为队列使用。

LinkedList 实现了 Cloneable 接口,可实现克隆。

LinkedList 实现了 java.io.Serializable 接口,即可支持序列化,能通过序列化去传输

简单的一个LinkedList的方法

        //创建一个节点类,用来建立获取节点
        public class Node<E> {
    	
    	private E value;
    	private Node<E> next;
    	
    
    	public Node<E> getNext() {
    		return next;
    	}
    
    	public void setNext(Node<E> next) {
    		this.next = next;
    	}
    
    	public E getValue() {
    		return value;
    	}
    
    	public void setValue(E value) {
    		this.value = value;
    	}
    
    }


//创建一个MyLinkedList方法类
    public class MyLinkedList<T> {
    //定义一个头结点
    	private Node<T> head;
    	//初始化size
    	int size=0;
    	//创建一个add 添加元素
    	public boolean add(T t) {
    		size++;
    		if(head==null) {
    		//创建一个新节点,用来保存第一个元素的地址
    			head = new Node<>();
    			//添加t这个元素
    			head.setValue(t);
    			return true;
    		}
    		//固定头结点,查找需要
    		Node temp =head;
    		while(temp.getNext()!=null) {
    			temp=temp.getNext();
    		}
    		//再次创建一个新节点 ,用来保存后续添加的元素的地址
    		Node<T> xinjiedian = new Node<>();
    		//添加t这个元素
    		xinjiedian.setValue(t);
    		temp.setNext(xinjiedian);
    		return true;
    	}
    	//创建一个取值的方法
    	public T get(int index) {
    		if(index<0||index>=size) {
    			System.out.println("输入有误");
    			return null;
    		}
    		Node<T> temp = head;
    		//遍历所有元素
    		for(int i = 0 ; i<	index;i++) {
    			temp = temp.getNext();
    		}
    		return temp.getValue();
    	}
    	//创建一个获取容器长度的方法
    	public int size() {
    		return size;
    	}
    }
    
    //创建一个主类,用来实现调用MyLinkedList
        public class Main {
            public static void main(String[] args) {
        		MyLinkedList<String> list = new MyLinkedList<>();
        		list.add("gaoxueya");
        		list.add("gaoxuezhi");
        		System.out.println(list.size());
        		System.out.println(list.get(1));
        		
        	}
    	
    }

ArrayList源码

DEFAULT_CAPCITY =10 //默认大小是10;
扩容机制 DEFAULT_CAPCITY + DEFAULT_CAPCITY>>1

Trimsize();减容到元素大小的 长度

toArray() 返回成Object数组 list和数组的相互转化

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值