Jump to content
  • 0

Fastlist Inside Array (Suggestion - Help)


Question

Recommended Posts

  • 0
Posted (edited)

On a Map, since Java8 you can use putIfAbsent. On a List you still have to check via .contains if an object isn't already registered. If your List contains 2 elements, it means you add twice the element, or you missed the check.

 

FastList got no uses (should be renamed FatList), use either ArrayList or its concurrent version (only if you add/remove in same time, or if you remove iterating it), CopyOnWriteArray.

 

Otherwise, c/p the part of code.

Edited by Tryskell
  • 0
Posted

On a Map, since Java8 you can use putIfAbsent. On a List you still have to check via .contains if an object isn't already registered. If your List contains 2 elements, it means you add twice the element, or you missed the check.

 

FastList got no uses (should be renamed FatList), use either ArrayList or its concurrent version (only if you add/remove in same time, or if you remove iterating it), CopyOnWriteArray.

 

Otherwise, c/p the part of code.

Ill send u the part of code i made cause i dont want share it and i work in java 7 (freya) so take a look in it (i send it now)thanks

  • 0
Posted

I read your code, and I don't find the use of those arrays and lists. Plus, don't use FastList, use CopyOnWriteArrayList.

 

Eventually ask exactly what you want to do, because even on your PM, with your piece of code, it wasn't clear.

 

For the biggest I think I answered correctly, at least it's the easiest/fastest implementation of your idea.

 

You only have to for loop couples to get needed infos.

  • 0
Posted

I read your code, and I don't find the use of those arrays and lists. Plus, don't use FastList, use CopyOnWriteArrayList.

 

Eventually ask exactly what you want to do, because even on your PM, with your piece of code, it wasn't clear.

 

For the biggest I think I answered correctly, at least it's the easiest/fastest implementation of your idea.

 

You only have to for loop couples to get needed infos.

I made an npc instance that when a player click "register" a window pop up to his/her parther (if partner exist and is in range of 500 aoe )

and ask if she/he want to join  if she accept (join) the couple (those 2 players) are added in the event. 

 

A threadpool start and check 5 min if couples > 4  event start... i want do a couple war 

  • 0
Posted

I made an npc instance that when a player click "register" a window pop up to his/her parther (if partner exist and is in range of 500 aoe )

and ask if she/he want to join  if she accept (join) the couple (those 2 players) are added in the event. 

 

A threadpool start and check 5 min if couples > 4  event start... i want do a couple war 

Pretty basic stuff. Don't use the hard way. Take an example from TvT event.

  • 0
Posted

Pretty basic stuff. Don't use the hard way. Take an example from TvT event.

Yeap yeap i know i already coded many events that use 1 object per time but this time is different.. we speak for 2 object rights?

 

L2PcInstance player = null; (1 object)

L2PcInstance partner = L2World.getInstance().getPlayer(player.getPartnerId());

 

_players.add(player);

_players.add(partner);

 

it works but i also want to make a 2nd map that add

those _players into a new  _playerList map

 

and after add them  _players.clear();  so its fresh clean again...

 

the problem i face is i dont know how to handle _playerList map...  there is nothing i can use   exept a For to teleport them but inside the event

there is nothing to control them like    coupleId(1).doDie  and kill both players if 1 of them die... 

  • 0
Posted
final L2PcInstance partner = L2World.getInstance().getPlayer(Couple.getPartnerId(player.getObjectId()));

That's to retrieve the partner, to send your popup (you could simply check wedding manager).

 

Regarding couple management, once again, the easiest is to put booleans flags into Couple class (or an Enum).

 

You for loop couples and retrieve couples with good enum value or good flag value.

 

You got all needed in CoupleManager (getCouples(), getCouple(coupleid), etc).

  • 0
Posted (edited)

Got some tests or infos about it ?

 

No.

 

But basically the javadoc says it all.

 

You got either CopyOnWriteArrayList, which that said :

 

 

 

A thread-safe variant of ArrayList in which all mutative operations (add, set, and so on) are implemented by making a fresh copy of the underlying array.

This is ordinarily too costly.

 

Or a concurrent Set, backed by a ConcurrentHashMap, with all Set properties such as uniqueness. It all depends if he needs to get or not.

Edited by Sdw
  • 0
Posted (edited)

Ooooookkkkk, I was wondering why L2J did that way, and since I ran one little test I understand :P. My code isn't serious and barely be called a test : 100k integers addition, then I Iterator to force concurrency and remove multiples of 2 and 5 (a simple hashset throws a concurrentexception).

 

The only thing which changes from one test to another is the container :

final Set<Integer> map = new CopyOnWriteArraySet<>();
final List<Integer> map = new CopyOnWriteArrayList<>();
final Set<Integer> map = ConcurrentHashMap.newKeySet();

Result is kinda sad :

 

CopyOnWriteArraySet : between 40 and 67sec.

CopyOnWriteArrayList : between 15 and 30sec.

ConcurrentHashMap.newKeySet : between 0,8 and 1,5sec.

 

Don't use CopyOnWriteArrayList nor CopyOnWriteArraySet.

 

I have some commits to do on aCis :P.

 

If you want to test it :

    public static void main(String[] args)
    {
    	 long storedTime = System.currentTimeMillis();
    	 
    	final Set<Integer> map = new CopyOnWriteArraySet<>();
    	
    	//Populate the map.
    	 for (int i = 0 ; i < 100000 ; i++)
    		 map.add(i);
    	 
    	 Iterator<Integer> it = map.iterator();
    	         while(it.hasNext()){
    	        	 Integer value = it.next();
    	             if(value%5 == 0 || value%2 == 0) {
    	            	 System.out.println("skipped:"+value);
    	            	 map.remove(value);
    	             }
    	         }
    	 
    	 long currentTime = System.currentTimeMillis();
    	 System.out.println("map size: " + map.size());
         System.out.println("execution time: " + (currentTime - storedTime));
    }
Edited by Tryskell
  • 0
Posted

 Tryskell the send message window works..  i just dont know how to add 2 objects in 1 array and take them as 1 team

2 players (team1)

2 players (team2)

2 players (team3)

this is what i want to do

and before event start if 1 player click "unregister" it unregister his partner too

  • 0
Posted

public static ArrayList<FastList> couplesList = new ArrayList<>();

public static final FastList<L2PcInstance> _players = new FastList<L2PcInstance>();final L2PcInstance partner = L2World.getInstance().getPlayer(player.getPartnerId());

 

 

 

 

 

 

 


else if (command.startsWith("remove"))

{

 

//=================================================================


if (couplesList.contains(_players))

{

couplesList.remove(_players);

 

player.sendMessage("You removed your participation from event");

partner.sendMessage("Your partner removed the participation from event");

 

setCouples(getCouples() -1);

}

 


 

else if (command.startsWith("join"))

{

 

//=================================================================

 

final L2PcInstance partner = L2World.getInstance().getPlayer(player.getPartnerId());

 

 

_players.add(player);

_players.add(partner);

 

couplesList.add(_players);

 

_players.clear();

 

player.sendMessage("You are registered in the event with your partner");

partner.sendMessage("You are registered in the event with your partner");

 

setCouples(getCouples() + 1);

 

Timer();

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×
×
  • Create New...

Important Information

This community uses essential cookies to function properly. Non-essential cookies and third-party services are used only with your consent. Read our Privacy Policy and We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue..