java 怎样算一个集合有多少kb

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 怎样算一个集合有多少kb相关的知识,希望对你有一定的参考价值。

如果这个集合是这样
List<String> list = new ArrayList<String>();
list.add("abcdefghnopqr<?3>s38i458ytudifeisdkfjslf");
list.add("kfjiefjdkfjks怎么样...??d<optiorn>nfdkfnlskfj");
...
这个集合有这样的数据 10万条,那如何知道到这10万条数据有多少kb呢?
比如 :System.out.println(list.size()); //这样取得这个集合有多少条,那如何计算这么多条有多少KB 或 MB 或 GB 呢?
如果是这种比较复杂的集合该怎么统计呢?
List<Map<Object, Object>> list_map = new ArrayList<Map<Object, Object>>();
这个List 里面有 2万个Map ,一个Map里面有 30个键值对
那这个集合会有多大呢?用(KB或MB或GB)描述..

参考技术A 一个字节为一B = 8b
1KB = 8Kb
参考技术B 一个字节为一B = 8b 参考技术C 等待 参考技术D 来看看 第5个回答  推荐于2016-09-14 java内部使用utf-16编码,所以字符串中的一个字符(不管是字母,或者汉字)占4个字节。
内存中字符串占用的字节数=字符串的长度*4。
1G=1024M,1M=1024KB,1KB=1024Byte.
,针对你的问题,取出list中得每个字符串,分别计算字符串占用的字节数。
然后总和相加。就是list占用的字节数。追问

我测试了一下 计算出的大小 为74KB 实际输出大小 txt格式为 39.8KB excle 为31.5KB 似乎这样计算的误差有点大 。是不是因为 是utf-16 还要/2 的原因 或者是字符串的长度 *2 就够了!
utf-8 与 utf-16 有多大差别?

追答

utf-16是java内容使用的编码,也就是说,上面的方法计算的是list在内存中的大小。
字符串输出后,字符串占用空间依赖文件所采用的编码(与操作系统编码有关)。
中文windows,使用gbk编码。在gbk编码中,一个英文字符占一个字节。一个汉字占两个字节。

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

JAVA同集合中怎样比较相邻两个元素? 例如:集合a有1,5,7,9 2,4,5,9 ,2,3,5

JAVA同集合中怎样比较相邻两个元素?
例如:集合a有1,5,7,9    2,4,5,9    ,2,3,5,7   2,3,5,7            2,6,7,9    4,6,8,9      2,3,5,7   2,6,7,9    2,6,7,9九个数组。
比较后为:1,5,7,9   2,4,5,9     2,3,5,7    2,6,7,9   4,6,8,9    2,3,5,7  2,6,7,9  七个数组。再查间隔多少个数组。1,5,7,9后面没有,就是6个。2,3,5,7中间有2个,就是2。

关于这个问题很简单,只需要一个循环遍历就行,假如有n个元素,就会有n-1个结果啊,将相邻的两个数挨个比较,就是将一个数组(集合)挨个循环遍历一遍就好了,然后把这结果用-1,0,1表示,用数组装起来,就ok了。

代码如下:

 

public static void main(String[] args) 

  int data[] = 1,5,7,9,2,4,5,9,2,3,5;

  for (int i = 0; i < data.length-1; i++) 

   if(data[i] > data[i+1])

    //前大于后

    System.out.println(1);

   else if(data[i] < data[i+1])

    //前小于后

    System.out.println(-1);

   else

    //相等

    System.out.println(0);

   

   

  

 


运行结果:

参考技术A

操作类Controls.java

package com.kangyong.demo10;

import java.util.Arrays;
import java.util.LinkedList;

public class Controls

/*
参数:集合,索引
返回值:int,与第index个元素相等的,下一个元素,之间的距离。起个名:相邻值
*/
public static int getDistance(LinkedList<Integer[]> nums,int index)
int distance=0;
for (int i = 1; i < nums.size()-index; i++)
//指定元素
String a = Arrays.toString(nums.get(index));
//被查元素
String b = Arrays.toString(nums.get(index+i));
if(a.equals(b))

return distance;

distance++;

return distance;

/*
删除整个集合中,所有相邻值=0的其中一个元素
*/
public static void removeZero(LinkedList<Integer[]> nums)

for (int i = 0; i < nums.size()-1 ; i++)
//如果相邻值0则删除当前元素
if(getDistance(nums,i)==0)
nums.remove(i);
//然后重新遍历
i=0;







使用类ListTest.java

package com.kangyong.demo10;

import java.util.Arrays;
import java.util.LinkedList;

public class ListTest
public static void main(String[] args)
//创建集合
LinkedList<Integer[]> list = new LinkedList();
//创建数组
Integer[][] a = 1,5,7,9 ,2,4,5,9, 2,3,5,7,2,3,5,7,2,6,7,9,4,6,8,9,4,6,8,9,2,3,5,7,2,6,7,9,2,6,7,9;
//放入集合
for (int i = 0; i < a.length; i++)
list.add(a[i]);

//删除操作
Controls.removeZero(list);
System.out.println("遍历筛选后结果");
for (Integer[] integers : list)
System.out.println(Arrays.toString(integers));

System.out.println("==================");
//计算第一个元素距离下一个相同元素相邻值
int re = Controls.getDistance(list,0);
System.out.println(re);
System.out.println("==================");
//遍历所有元素相邻值
for (int i = 0; i < list.size(); i++)
int result = Controls.getDistance(list,i);
System.out.print("数组"+Arrays.toString(list.get(i))+"相邻值 = ");
System.out.println(result);

输出结果:

本回答被提问者采纳
参考技术B 看题意,第一轮循环是要去重,即相邻两个元素去掉一个,那么可以用迭代器iterator比较前后元素,一致则使用remove方法删除元素,第二个是求每个元素在后面出现相同时,中间位数,两层循环解决,即依次比较,下标想减。

以上是关于java 怎样算一个集合有多少kb的主要内容,如果未能解决你的问题,请参考以下文章

怎样从java集合类set中取出数据?

Java中Set集合怎样用for遍历?

JAVA同集合怎样比较?

怎样从java集合类set中取出数据

1439 互质对

如何证明一个集合是另一个集合的子集