Java怎么找一个ArrayList中最长的连续相同元素?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java怎么找一个ArrayList中最长的连续相同元素?相关的知识,希望对你有一定的参考价值。

例子:
a,a,a,b,b,b,a,a,a,a,b,b,c
应该返回 中间4个aaaa的位置
a,a,a,b,b,a
返回前三个a的位置
a,b,b,a
的话就返回中间两个b的位置



import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Joey


private static int getSeat(List<String> list)

int max = Integer.MIN_VALUE;
int index = 0;
for(int i = 0; i < list.size(); i++)

String a = list.get(i);
int num = 1;
int j = i + 1;
while(j < list.size() && a.equals(list.get(j)))

num++;
j++;

if(max < num)

index = i;
max = num;

i += num - 1;

return index;


public static void main(String[] args)

//List<String> list = Arrays.asList("a", "a", "a", "b", "b", "b", "a", "a", "a", "a", "b", "b", "c");
//List<String> list = Arrays.asList("a", "a", "a", "b", "b", "a");
List<String> list = Arrays.asList("a", "b", "b", "a");
int i = getSeat(list);
System.out.println(i);


参考技术A
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
list.add("2");
list.add("3");
list.add("4444");
list.add("4444");
list.add("4444");
list.add("4444");
list.add("5");
list.add("5");
list.add("5");

int findStrlength = 0;
String findStr = "";
int prevStrLength = 0;
String prevStr = "";
for (int i = 0; i < list.size(); i++) 
String s = list.get(i);
if (!prevStr.equals(s)) 
if (prevStrLength > findStrlength) 
findStr = prevStr;
findStrlength = prevStrLength;

prevStrLength = 0;
prevStr = s;

prevStrLength += 1;

System.out.println(findStr + ":" + findStrlength);

本回答被提问者和网友采纳

java中怎么判断arraylist占用的内存空间大小

ArrayList就是动态数组,也是一个对象。
创建一个ArrayList对象,该对象存放在堆内存中,且是一个内存连续的内存区域。
1、ArrayList是用数组实现的,这个数组的内存是连续的,不存在相邻元素之间还隔着其他内存。
2、索引ArrayList时,速度比原生数组慢是因为你要用get方法,这是一个函数调用,而数组直接用[ ]访问,相当于直接操作内存地址,速度当然比函数调用快。
3、新建ArrayList的时候,JVM为其分配一个默认或指定大小的连续内存区域(封装为数组)。
4、每次增加元素会检查容量,不足则创建新的连续内存区域(大小等于初始大小+步长),也用数组形式封装,并将原来的内存区域数据复制到新的内存区域,然后再用ArrayList中引用原来封装的数组对象的引用变量引用到新的数组对象:
elementData = Arrays.copyOf(elementData, newCapacity);
参考技术A 你想在代码里判断是做不到的。
只能自己计算。先算出list里面每个object的大小(char=1,int=4等等),然后*arraylist.size()。本回答被提问者和网友采纳
参考技术B 应该就是arraylist.length*size();
size()就是返回arraylist中存储对象的占用内存大小
参考
http://blog.csdn.net/hoszb/article/details/5846069
参考技术C 楼主非要看的话,只有一招了。利用反射获取数组的大小。

import java.lang.reflect.*;
import java.util.*;

public class Test
public static void main(String[] args) throws Exception
ArrayList list = new ArrayList();
Field f = ArrayList.class.getDeclaredField("elementData");
f.setAccessible(true);
Object[] elementData = (Object[])f.get(list);
System.out.println(elementData.length);

参考技术D 成员函数也是函数,函数都是有地址的,所以函数是占用内存空间的,但函数由于是多对象共享的,所以函数不占用对象的内存地址,是放在代码段的

以上是关于Java怎么找一个ArrayList中最长的连续相同元素?的主要内容,如果未能解决你的问题,请参考以下文章

求字符串的最长公共子串

华为OD机试真题Java实现最长连续子串真题+解题思路+代码(2022&2023)

ALBB 找公共最长连续字母序列的长度

字符串最长公共子序列问题

LeetCode 128 最长连续序列

LeetCode 128 最长连续序列